C ++遍历对象并获取其地址

时间:2017-04-12 13:37:38

标签: c++ pointers stdvector

我有以下代码段:

vector<shape*> triangle_ptrs;
for (auto x : triangles)
    triangle_ptrs.push_back(&x);

triangle是一个派生自shape类的类,而trianglesstd::vector个三角形:

std::vector<triangle> triangles;

我需要保存三角形的地址,但是当我遍历集合时,它们的地址似乎是相同的。我该如何解决这个问题?

2 个答案:

答案 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&,然后您将获得对向量元素的引用。