如果迭代器指向向量的最后一个元素时,它的值增加2呢?在 这个问题中,如何通过两个元素将迭代器调整为 STL 容器,提供了两种不同的方法:
我已经用 VC + + 7测试过这两种方法,当迭代器指向 STL 容器的最后一个元素或者更多元素的时候:
vector<int> vec;
vec.push_back( 1 );
vec.push_back( 2 );
vector<int>::iterator it = vec.begin();
advance( it, 2 );
bool isAtEnd = it == vec.end(); // true
it++; // or advance( it, 1 ); - doesn't matter
isAtEnd = it == vec.end(); //false
it = vec.begin();
advance( it, 3 );
isAtEnd = it == vec.end(); // false
在遍历向量和其他容器时,我看到过多次建议与 Vector: : end ()进行比较:
for( vector<int>::iterator it = vec.begin(); it != vec.end(); it++ ) {
//manipulate the element through the iterator here
}
显然,如果迭代器超过了循环中的最后一个元素,for 循环语句中的比较将计算为 false,循环将愉快地继续进入未定义的行为。
如果我曾经在迭代器上使用 forward ()或任何类型的增量操作,并且使它指向容器的末端,我将无法检测到这种情况,这样做对吗?如果是这样,什么是最佳实践——不使用这些进步?