为什么我不能像这样擦除矢量的所有元素?
Why can't I erase all element of vector like this?
我崩溃的源代码在这里:
#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;
}
擦除最后一个元素时总是失败。
来源http://en.cppreference.com/w/cpp/container/vector/erase:
使擦除点处或之后的迭代器和引用无效,包括end()迭代器。
因此,擦除会使iter
迭代器失效,之后您将有未定义的行为。
相关文章:
- 第 k 个最小元素 - 不能创建大于 k 大小的数组
- 不能使用嵌套结构中的联合元素作为 scanf() 的参数来存储所需的值
- 为什么我不能将元素插入数组中的列表?
- 为什么我不能将元素移动到不可复制的向量中?
- 为什么 vector::erase 不能在带有 const 的类元素上工作
- C 气泡排序升序 - 不能对所有元素进行排序
- 一个元素不能改变的非守恒向量
- 为什么我不能将新元素推回列表
- 不能直接分配元素 std::array,它说没有运算符"="匹配
- 为什么我不能像这样擦除矢量的所有元素?
- 为什么我不能声明常量数组?(不是常量数组,而是数组,其元素和大小无法更改)
- 在c++中不能向集合中插入元素
- 不能设置std::map元素
- 为什么我不能通过指针从数组中删除第一个以外的元素
- 我的map迭代器不能访问map的每个元素,我该如何修复它?
- 不能交换数组元素 C++
- 标量初始化器代码中的多余元素可以用gcc编译,但不能用g++
- 不能改变Cocos2d-x MenuItemToggle元素的不透明度
- 如果元素不能为代码工作
- 为什么我不能写入 C++ 中字符串的第 0 个元素?