gpt4 book ai didi

c++ - 不在调整大小的 vector 中使用迭代器

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:33 26 4
gpt4 key购买 nike

我读了 The C++ Programming Language : Special Edition

不要在调整大小的 vector 中使用迭代器

考虑这个例子。

vector< int >::iterator it = foo.begin();

while ( it != foo.end() ) {
if ( // something ) {
foo.push_back( // some num );
}
++it;
}

这有什么问题吗? vector调整大小后,循环条件中的foo.end()会不会向前推1?

附言此外,如果 vector 为 x 个整数保留空间会怎样。如果 push_back 没有违反这个空间,它是否仍然是一个问题(如果 it.end() 指向 vector 中包含某些东西的最后一个元素之后,我会假设是这样)。

最佳答案

是的,它有问题。

push_back 的任何调用都有可能使所有 迭代器失效到 vector 中。

foo.end() 将始终检索有效的结束迭代器(它可能与 foo.end() 最后返回的值不同),但是 可能已经失效。这意味着增加它或比较它可能会导致未定义的行为。

关于c++ - 不在调整大小的 vector 中使用迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120298/

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