如果我将迭代器指向向量的最后一个元素时,它会增加2怎么办?在这个询问如何通过2个元素调整到STL容器的迭代器的问题中,提供了两种不同的方法:
当迭代器指向STL容器的最后一个元素或更远时,我用VC++ 7测试了它们的边缘情况:
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
Run Code Online (Sandbox Code Playgroud)
我已经看过有时可以建议在遍历vector和其他容器时与vector :: end()进行比较:
for( vector<int>::iterator it = vec.begin(); it != vec.end(); …
Run Code Online (Sandbox Code Playgroud) 如果函数的返回类型不是void
,并且函数没有返回任何内容,那么我猜编译器会返回一个垃圾值(可能被视为未初始化的值).它发生在编译时,为什么不应该抛出错误呢?
例如,
int func1() {
return; // error
}
int func2() {
// does not return anything
}
Run Code Online (Sandbox Code Playgroud)
第二个func2
应该抛出错误,但事实并非如此.有原因吗?我的想法是,它可以看作是一个未初始化的值,所以如果我们需要在第二种情况下抛出错误,那么我们需要抛出错误,如果一个值是未初始化的,比如说
int i; // error
int i = 6; // okay
Run Code Online (Sandbox Code Playgroud)
有什么想法,或者这是一个重复的问题?我感谢您的帮助.