【问题标题】:Why does iterating vector gives fixed addresses in c++? [duplicate]为什么迭代向量在 C++ 中给出固定地址? [复制]
【发布时间】:2023-04-02 00:45:02
【问题描述】:

我有一个汽车向量

std::vector<Car> cars;

我的问题是为什么下面的迭代会产生不同的结果

for ( Car c : cars){
    std::cout << c.getID() << "--" << &c << std::endl;
}

这导致固定地址如下:
1--0x61fef0
2--0x61fef0
3--0x61fef0
4--0x61fef0

虽然以下迭代导致每个项目的地址唯一:

for(int i = 0; i < 4; i++){
    std::cout << cars[i].getID() << "--" << &cars[i] << std::endl;
 }

结果:
1--0x8d18e8
2--0x8d18ec
3--0x8d18f0
4--0x8d18f4

我的问题是为什么?

【问题讨论】:

  • 因为在第一个版本中,您正在获取向量中对象的副本地址。将其更改为for ( Car c&amp; : cars),您将获得与第二个版本相同的结果。

标签: c++


【解决方案1】:

您的循环变量声明Car c : cars 需要从向量中复制汽车。为避免这种情况并仅在向量中就地引用汽车,请改用const Car&amp; c : carsCar&amp; c : cars

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2014-10-08
    • 2023-04-06
    相关资源
    最近更新 更多