gpt4 book ai didi

c++ - 修改 vector 引用。什么无效?

转载 作者:行者123 更新时间:2023-11-28 06:08:04 31 4
gpt4 key购买 nike

假设我有以下代码:

void appendRandomNumbers(vector<double> &result) {
for (int i = 0; i < 10000; i++) {
result.push_back(rand());
}
}

vector<double> randomlist;
appendRandomNumbers(randomlist);
for (double i : randomlist) cout << i << endl;

重复的 push_back() 操作最终会导致重新分配,我怀疑是内存损坏。事实上,vector.push_back() documentation说是

If a reallocation happens, all iterators, pointers and references related to the container are invalidated.

重新分配发生后,哪个作用域将具有正确的 vector ? appendRandomNumbers 使用的引用是否无效,因此它将数字插入不应放置的位置,或者“正确”的位置是否仅由 appendRandomNumbers 知道并且 vector 一旦超出范围就会被删除?

打印循环会遍历实际 vector 还是遍历 vector 以前所在的陈旧内存区域?

编辑:现在大多数答案都说 vector 引用本身应该没问题。我有一段类似于上面的代码,当我修改通过引用接收的 vector 时导致内存损坏,当我改变方法时停止内存损坏。不过,我不能排除我在更改过程中偶然修复了真正的原因。将对此进行实验。

最佳答案

我认为您对正在发生的事情感到困惑。 push_back() 可以使指向 vector 中对象的迭代器和引用无效,而不是 vector 本身。在你的情况下,不会有无效,你的代码是正确的。

关于c++ - 修改 vector 引用。什么无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973422/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com