【发布时间】:2015-04-25 09:55:30
【问题描述】:
我有一个std::vector<int> 和一个指针int*,它们指向向量中的一个元素。假设指针指向第三个元素:pointer=&vector.at(2)。如果我现在对向量进行洗牌,它是否仍会指向同一个元素(第三个),还是会指向曾经是第三个元素现在已移动的新位置?
在那之后,我想让这个问题更笼统一点:当向量扩展或缩减时,指向向量中元素的指针和迭代器的行为如何?
【问题讨论】:
-
一个指针和地址,一个内存位置。它指向其地址中的任何内容;除非指针本身改变,否则它总是指向同一个地址。
-
花点时间想想什么是指针?指针是指向内存的地址。不管你如何洗牌向量,指针仍然指向同一个地址。
-
它们保持不变,这就是问题所在。
-
您不能在 C++ 中移动对象。 (你可以有移动构造函数等,但在这个问题的上下文中,这些不是“移动对象”的意思)