作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下代码片段:
vector<shape*> triangle_ptrs;
for (auto x : triangles)
triangle_ptrs.push_back(&x);
triangle
是派生自 shape
类的类,triangles
是三角形的 std::vector
:
std::vector<triangle> triangles;
我需要保存三角形的地址,但当我遍历集合时,它们的地址似乎是相同的。我该如何解决这个问题?
最佳答案
在这个循环中:
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);
关于C++ 遍历对象并获取它们的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371192/
我是一名优秀的程序员,十分优秀!