断言错误,使用 STL 向量
Assertion Error, using STL Vector
for(myIterator = numbers.begin();myIterator != numbers.end() ;myIterator++)
{
resultVect.push_back(*myIterator+2);
numbers.erase(myIterator+2);
}
数字由一系列数字组成(例如 1,2,3,4,5,6,7)然后我想删除每个第 3 个数字。像这样,
1 2 3 4 5 6 ( 第一轮 -> 3 出局)
1 2 4 5 6 ( 第二轮 -> 6 出局)
1 2 4 5 ( 第三轮 -> 4 出局)
等等。
我将把出去的数字存储在另一个向量(resultVect)中。
我收到断言错误。请告知tq
当您将 erase
用于向量时,它将在擦除位置之后重新定位元素,因此之后的迭代器将失效。
其次,当你说iterator + 2
时,这也可能超出向量的范围。
从向量中删除一个元素会使该元素及以后的所有迭代器无效(在当前标准中,有一个未解决的问题可以更改它)。
第一个问题是您希望流程的效率如何,如果您不太关心性能,您可以做一个简单的循环:
for (int i = 3; i < input.size(); i+=3) {
result.push_back(input[i]);
}
for (int i = (input.size()+2)/3 - 1; i >= 0; --i) {
input.erase(input.begin()+i*3);
}
如果性能至关重要,则可以查看std::remove
算法,并使用相同的方法避免在运行算法时执行元素的多个副本。基本上,您需要在原始容器中进行读取和写入头,并且只有在不满足条件时才从读取位置复制到写入位置。
简单地说:你不能在迭代时修改一个向量。迭代器将变得无效,这将得到一个断言。
要正确执行所需的操作,可以考虑创建包含要保留的值的向量副本,以及包含要删除的值的向量。然后将数字向量替换为具有要保留的值的数字向量。
相关文章:
- 具有 STL 向量类型成员的类的复制内存
- STL 向量无缘无故损坏,VC++ 2017
- 如何避免自定义 STL 向量类的智能指针 delete[] 异常?
- STL向量上出现奇怪的复制构造函数错误
- OpenMP 和不同的 STL 向量
- C++ STL 向量保留太多容量会消耗大量内存吗?
- 使用 boost Spirit 解析为 STL 向量
- C++ 在列表末尾插入元素的列表的 STL 向量
- C++ 使用数组初始化时的 STL 向量内存管理
- 仅编写 c++ stl 向量的第一个元素的正确方法
- 如何在<typename> <long> 不更改给定代码的情况下将自定义向量与 STL 向量相互转换?
- 限制指针访问STL ::向量元素
- 传递包裹在shared_ptr中的 STL 向量
- 如何将结构指针插入stl向量中并显示内容
- 将一个STL向量有效地分配给另一个STL矢量(WSL问题)
- erase() 不适用于结构/对象内的 STL 向量
- STL向量具有反向和pop/push_back成本
- 获取 STL 向量C++的地址
- Unique_ptr的 STL 向量 - 如何重置
- 带有 STL 向量的模板函数会因新的分配器而中断