参考矢量被推回另一个矢量破坏



它遇到了以下问题:

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

#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

什么都没有被摧毁。

最新更新