它遇到以下问题:
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的引用时被破坏/损坏
#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