c++ - 当我洗牌时,指向 vector 中元素的指针会发生什么?

标签 c++ pointers vector

我有一个 std::vector<int>和一个指针 int*指向 vector 中的一个元素。假设指针指向第三个元素:pointer=&vector.at(2) .如果我现在对 vector 进行洗牌,它是否仍会指向同一个元素(第三个),还是会指向曾经是第三个元素现在已移动的新位置?

在那之后,我想让这个问题更笼统一点:当 vector 扩展或缩减时,指向 vector 中元素的指针和迭代器的行为如何?

最佳答案

指针将继续指向相同的位置,因此当您随机播放时,它会指向已移动到您指定位置的任何元素。

当您扩展 vector 的大小时,所有现有的指向 vector 的指针和迭代器都可能变得无效。当您洗牌时,它们会继续引用相同的位置,该位置(通常)包含与洗牌前不同的值。

减小 vector 的大小将取决于您如何做到这一点。一种方法是创建一个临时 vector 作为当前 vector 的拷贝,交换两者,然后销毁临时 vector (通常是隐式地,通过让它超出范围)。如果你这样做,指针将进入临时的,并在它被销毁时失效。

如果您使用 shr​​ink_to_fit (可能)不会使迭代器/指针无效,但可能没有任何效果(标准指定它是非绑定(bind)请求,并且没有说明任何内容关于它使迭代器/指针无效)。

关于c++ - 当我洗牌时,指向 vector 中元素的指针会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684573/

相关文章:

C++ 具有子类特定值的非更改成员变量

c++ - 无法将一个数组的内容复制到另一个数组中...得到奇怪的数字

c++ - 控制台崩溃输出指针数组和迭代 C++

vector - 在三个js中前后移动相机

c++ - 如何在一个 vector 中管理基类实例和派生类实例?

c++ - 数组 vector 是否连续?

c++ - Intellisense 与编译器 : "A namespace with this name does not exist" vs "not a class or struct name" 不一致

c++ - vector 内存的有效清除

c++ - 对 C++ 指针和引用主题的困惑

php - 在 PHP 中,为什么我的 session 变量保留为引用?