C++循环遍历对象并获取它们的地址

Eut*_*rpy 3 c++ pointers stdvector

我有以下代码片段:

vector<shape*> triangle_ptrs;
for (auto x : triangles)
    triangle_ptrs.push_back(&x);
Run Code Online (Sandbox Code Playgroud)

triangle是一个派生自shape类的类,它triangles是一个std::vector三角形:

std::vector<triangle> triangles;
Run Code Online (Sandbox Code Playgroud)

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

Sla*_*ica 6

在这个循环中:

for (auto x : triangles)
    triangle_ptrs.push_back(&x);
Run Code Online (Sandbox Code Playgroud)

这在逻辑上等于:

for ( auto it = triangles.begin(), it != triangles.end(); ++it) { 
    auto x  = *it; 
    triangle_ptrs.push_back(&x);
} 
Run Code Online (Sandbox Code Playgroud)

你在每次迭代中复制,将你的循环改为:

for (auto &x : triangles)
    triangle_ptrs.push_back(&x);
Run Code Online (Sandbox Code Playgroud)