不将迭代器用于调整大小的向量

Ano*_*ous 2 c++ containers iterator

我读了"C++编程语言:特别版"

Don't use iterators into a resized vector

考虑这个例子.

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

while ( it != foo.end() ) {
  if ( // something ) {
    foo.push_back( // some num );
  }
  ++it;
}
Run Code Online (Sandbox Code Playgroud)

这有问题吗?向量调整大小后,循环条件中的foo.end()是否会向前推送1?

PS此外,如果向量为x个整数保留了空间,该怎么办?如果push_back没有违反这个空间,它仍然是一个问题(如果it.end()指向一个超过包含某些东西的向量中的最后一个元素,我会假设它.

CB *_*ley 5

是的,它存在问题.

任何调用push_back都有可能使所有迭代器无效为向量.

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