当前位置: 首页 > 知识库问答 >
问题:

为什么迭代向量在c中给出固定地址?[副本]

闻人杰
2023-03-14

我有一个汽车矢量

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

我的问题是为什么?

共有1个答案

高展
2023-03-14

循环变量声明Car c:cars需要从向量中复制cars。为了避免这种情况,只需参考向量中的车辆,请使用const Car

 类似资料:
  • 本文向大家介绍C++ 向量迭代器,包括了C++ 向量迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 begin将an返回iterator到序列容器中的第一个元素。 end返回iterator末尾的第一个元素。 如果矢量对象const,无论是begin和end返回const_iterator。如果const_iterator即使向量不返回,也要返回const,则可以使用cbegin和cend。

  • 我知道这个问题在这个论坛上已经被问过好几次了。但我仍在发帖,因为没有一个答案看起来是具体的。专家们,你们能帮我理解什么时候使用迭代器吗。当我们有一个非常大的数据集时,我们是理想地使用它,还是当我们有大量数据要返回时,将其用作方法的返回类型?

  • 固定映射地址和输入输出重映射 固定映射地址是一组特殊的编译时确定的地址,它们与物理地址不一定具有减 __START_KERNEL_map 的线性映射关系。每一个固定映射的地址都会映射到一个内存页,内核会像指针一样使用它们,但是绝不会修改它们的地址。这是这种地址的主要特点。就像注释所说的那样,“在编译期就获得一个常量地址,只有在引导阶段才会被设定上物理地址。”你在本书的前面部分可以看到,我们已经设定

  • docker中的redis容器IP地址一直都是127.0.0.1,无法改变? 背景:把Springboot项目部署到docker了,然后在运行项目时,Caused by: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: /127.0.0.1:6379 尝试:1、修改了redis.con

  • 此代码未编译,因为被视为

  • 为什么我的SIMD向量4长度函数比原始向量长度方法慢3倍? SIMD矢量4长度函数: 幼稚的实现: 我用GCC(Ubuntu7.4.0-1Ubuntu1~18.04.1)7.4.0: SSE版本输出: 纯C版本输出: