矢量迭代器不是增量的.erase()
Vector iterator not incremental .erase()
我正在尝试删除这个向量中与播放器冲突的任何元素。然而,当我试图从向量中删除元素时,程序崩溃,我得到了错误;"矢量迭代器不是增量的"。
for (std::vector<Coin>::iterator i=CoinSet.begin(); i!=CoinSet.end(); i++)
{
if (i->PlayerClear(player.collider()) == true)
{
score++;
cout<<score<<endl;
CoinSet.erase(i);
}
}
这个代码运行得很好,直到"CoinSet.erase(i)",我尝试在不同的点使用"CoinSet.clear()",但没有成功。任何帮助都将是伟大的,提前感谢!
这已经被讨论得死去活来了。不能对无效迭代器进行操作。你想要这样的东西:
for (auto it = CoinSet.begin(); it != CoinSet.end(); /* no increment here! */ )
{
if (/* ... */)
{
// ...
CoinSet.erase(it++);
}
else
{
++it;
}
}
我不喜欢在参数中放入++语句。因此,erase()返回一个指向下一个元素的迭代器,因此可以将擦除行替换为:
it = CoinSet.erase(it); // iterator is replaced with valid one
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- std::vector::erase() 真的会在擦除时使迭代器失效吗?
- C++ Map erase(),迭代器打印 erased 元素
- 为什么 std::vector 迭代器在 erase() 调用后失效?
- 英特尔检查器 XE 2012 警告 #12367 - 将迭代器参数切片传递给 vector::erase()
- 如何使用for循环使用反向迭代器调用erase
- C ++,我的程序在调用list.erase后"go",没有增量迭代器?
- 为什么map.erase返回迭代器
- 在字符串中使用 erase 函数是否会使迭代器失效
- C++向量迭代器:erase() 最后一个项目崩溃
- std::vector::erase()是否在擦除时使迭代器无效
- erase删除迭代器所指向的元素失败时的处理方法
- 为什么Vector中的Erase和Insert函数使迭代器失效?
- std::map<t1, t2>::erase(迭代器位置)的工作?
- std::map::erase(it++)是否维护一个指向映射中下一个元素的有效迭代器
- 矢量迭代器不是增量的.erase()