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

标签 c++ pointers stdvector

我有以下代码片段:

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/

相关文章:

c++ - 将 int 转换为 ASCII 字符

C++ 和标准容器 : memory addresses of members

C 指针可以与任何其他数据类型对齐吗?

c++ - 将 std::vector<int> 设置为一个范围

c++ - std::vector 的奇怪行为

c++ - 将 vector 与包含不可复制数据类型的类一起使用

c++ - 为什么要在levelDB的缓存中使用while循环(函数Resize)?

android - C++适合Android开发吗?

c++ - Direct2D 实际上可以与 direct3D 11 设备一起使用吗?

c# - 如何在 C# 中创建未转义的十六进制字节字符串