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)
我需要保存三角形的地址,但是当我遍历集合时,它们的地址似乎是相同的.我该如何解决这个问题?
在这个循环中:
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)