为什么我不能像这样擦除所有矢量元素?

时间:2015-03-16 13:31:47

标签: c++

我崩溃的源代码在这里:

#include <vector>
using namespace std;
vector<int>::iterator iter , tempIt;
int main() {
    vector<int> cont(3, 5);
    for (iter = cont.begin() ; iter != cont.end() ; ) {
        tempIt = iter;
        ++iter;
        cont.erase(tempIt);
    }
    return 0;
}

擦除最后一个元素时总是失败。

1 个答案:

答案 0 :(得分:4)

来自http://en.cppreference.com/w/cpp/container/vector/erase

  

在擦除点或之后使迭代器和引用无效,包括end()迭代器。

因此,擦除会使您的iter迭代器失效,之后您会有未定义的行为。