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()指向一个超过包含某些东西的向量中的最后一个元素,我会假设它.
是的,它存在问题.
任何调用push_back都有可能使所有迭代器无效为向量.
foo.end()将始终检索有效的结束迭代器(可能与上次返回的值不同foo.end()),但it可能已失效.这意味着递增或比较它可能会导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |