新的cpp.当我调用擦除迭代器而不增加它时,我的程序立即退出而没有任何符号或崩溃.在下面的示例中,仅打印'After if condition'而不是任何内容.没有显示错误.但是,如果我正确调用 list.erase(it ++); 比打印全部. 我的问题是当我没有把它称为正确时发生的事情.为什么我没有看到任何崩溃或退出?我担心,我问这个问题的原因是为了捕捉这些崩溃,为什么我没有在捕获区中捕获它?有没有办法抓住它?
int main(int argc, char *argv[]) {
try {
list<int>::iterator it;
list<int> list;
list.push_back(1);
for (it = list.begin(); it != list.end(); ++it) {
if ((*it) == 1) {
list.erase(it);
}
cerr << "After if condition " << endl;
}
cerr << "After for condition" << endl;
} catch (...) {
cerr << "catch exception" << endl;
}
cerr << "Finish" << endl;
}
Run Code Online (Sandbox Code Playgroud)
擦除元素的引用和迭代器无效.
it被删除,然后通过++it导致未定义的行为使用:意味着任何事情都可能发生.
erase()返回最后一个删除元素之后的迭代器,这意味着您可以存储返回值erase()和continue,但循环需要修改以避免erase()在执行后跳过元素.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |