Опорный вектор уничтожен путем возврата к другому вектору - PullRequest
0 голосов
/ 06 апреля 2020

возникла следующая проблема:

vector<pair<float,float> Copy_Vec (const vector<pair<float,float> &v1)
{
     vector<pair<float,float> ret_vec;
     for(size_t var=0; var < v1.size(); var++)
      {
          pair<float,float> p = v1[var];
          ret_vec.pushback(p);
      }
     return ret_vac;
}

На самом деле уничтожает ссылку на v1, после операции обратного хода меняется вектор v1, как это происходит?

на самом деле это код

vector< Triangle > Track_Finder::Create_Triangle_Tree(const delaunator::Delaunator &delauny)
{
    Triangle triangle;
    vector< Triangle > ret_tree;
    for(size_t var=0; var < delauny.triangles.size(); var+=3)
    {
      vector<pair<float,float>> vec_p;
      vec_p.resize(3);
      pair<float,float> p;
        p.first =(float) delauny.coords[2 * delauny.triangles[var]];        //tx0
        p.second=(float) delauny.coords[2 * delauny.triangles[var] + 1];    //ty0
        vec_p[0]=p;
        p.first =(float) delauny.coords[2 * delauny.triangles[var + 1]];    //tx1
        p.second = (float) delauny.coords[2 * delauny.triangles[var + 1] + 1];//ty1
        vec_p[1]=p;
        p.first =(float) delauny.coords[2 * delauny.triangles[var + 2]];    //tx2
        p.second =(float) delauny.coords[2 * delauny.triangles[var + 2] + 1]; //ty2
        vec_p[2]=p;
        ret_tree.push_back(Triangle(vec_p));
    }
    return ret_tree;
}

при резервировании ссылки на delauny уничтожается / портится

1 Ответ

0 голосов
/ 06 апреля 2020
#include <iostream>
#include <string>
#include <vector>
#include <utility>
using namespace std;

vector<pair<float,float> > Copy_Vec (const vector<pair<float,float> > &v1)
{
     vector<pair<float,float> > ret_vec;
     for(size_t var=0; var < v1.size(); var++)
      {
          pair<float,float> p = v1[var];
          ret_vec.push_back(p);
      }
     return ret_vec;
}

int main()
{

  vector<pair<float,float> > a= {{1,1},{2,2} ,{3,3}};  

  vector<pair<float,float> > b = Copy_Vec(a); 

  for(const auto & it : b)
  {
      std::cout << it.first << " : " << it.second << "\n";
  }

  for(const auto & it : a)
  {
      std::cout << it.first << " : " << it.second << "\n";
  }
}
output : 
1 : 1
2 : 2
3 : 3
1 : 1
2 : 2
3 : 3

ничего не было уничтожено.

...