我有以下代码段:
vector<shape*> triangle_ptrs;
for (auto x : triangles)
triangle_ptrs.push_back(&x);
triangle
是一个派生自shape
类的类,而triangles
是std::vector
个三角形:
std::vector<triangle> triangles;
我需要保存三角形的地址,但是当我遍历集合时,它们的地址似乎是相同的。我该如何解决这个问题?
答案 0 :(得分:6)
在这个循环中:
for (auto x : triangles)
triangle_ptrs.push_back(&x);
在逻辑上等于:
for ( auto it = triangles.begin(), it != triangles.end(); ++it) {
auto x = *it;
triangle_ptrs.push_back(&x);
}
在每次迭代中复制,将循环更改为:
for (auto &x : triangles)
triangle_ptrs.push_back(&x);
答案 1 :(得分:1)
您将获取本地临时变量的地址,将x
的类型更改为auto&
,然后您将获得对向量元素的引用。