参考向量被推回另一个向量而破坏

问题描述 投票:0回答:1

它遇到以下问题:

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.reserve(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的引用时被破坏/损坏

c++ vector reference delaunay
1个回答
0
投票
#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
© www.soinside.com 2019 - 2024. All rights reserved.