将迭代器存储在临时容器上,然后从其他容器中删除它们
Store iterators on a temp container and then remove them from other container
我想做一些类似的事情:
std::vector<Class*> myVector;
std::vector<Class*> tempvector;
// Fill myVector
for (std::vector<Class*>::iterator it = myVector.begin(); it != myVector.end(); ++it)
if (some condition)
tempvector.push_back(it*);
for (std::vector<Class*>::iterator it = tmpvector.begin(); it != tmpvector.end(); ++it)
myVector.erase(it);
即,我填充myVector,然后它被迭代并标记存储在时间向量上的一些要移除的元素,然后时间向量被迭代并删除myVector上标记的元素。
我该怎么做?我需要标记元素以便以后删除。
您需要从最后一个迭代器循环到第一个,因为当您擦除向量中的元素时,所有超过您删除的迭代器的迭代程序都将无效。
std::vector<Class*> myVector;
std::vector<std::vector<Class*>::iterator> tempvector;
// Fill myVector
for (std::vector<Class*>::iterator it = myVector.begin(); it != myVector.end(); ++it)
if (some condition)
tempvector.push_back(it);
for (std::vector<std::vector<Class*>::iterator>::iterator it = tmpvector.end(); it != tmpvector.begin(); --it)
myVector.erase(*it);
尝试一下,我将Class*
更改为int
,以便简单地介绍这个想法。我把.erase
、std::remove_if
和std::find
混合在一起:
std::vector<int> myVector;
std::vector<int> toRemove;
for (std::vector<int>::iterator it=myVector.begin(); it != myVector.end(); ++it)
if (...condition...)
toRemove.push_back(*it);
myVector.erase(std::remove_if(myVector.begin(), myVector.end(),
[&toRemove](int x)
{
return std::find(toRemove.begin(), toRemove.end(), x) != toRemove.end();
}), myVector.end());
或
for (std::vector<int>::iterator it=myVector.begin(); it!=myVector.end(); )
{
if(std::find(toRemove.begin(), toRemove.end(), x) != toRemove.end())
it = myVector.erase(it);
else
++it;
}
相关文章:
- 如何删除包含其他向量的向量?
- 当动态库中的指针仍被其他库使用时,如何删除该指针
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 删除提升interprocess_mutex,当其他进程可能正在使用它时
- QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?
- 删除其他类的类驱动器
- 为什么删除的复制构造函数不允许使用其他具有多态类型的构造函数?
- 向前删除标题文件中其他名称空间的自定义类型
- 我应该删除来自其他函数或类方法的指针吗?
- C++:从动态结构数组中删除元素并移动其他元素
- 如何确保 boost::文件系统::remove 不会尝试删除由其他进程使用的文件
- 有没有办法将擦除-删除成语与其他循环条件一起使用
- 预编译标头 - 从所有其他文件中删除所有预编译的标题所必需的
- 是否能够从容器中删除其对象的其他引用
- 删除与其他类共享的指针
- 将指针移动到其他位置后删除分配的内存
- 通过单个向量进行迭代并删除作为其他元素子集的元素
- 是否通过其他按钮将单选按钮添加到QListWidget或从QListWidget中删除单选按钮?问题
- 将迭代器存储在临时容器上,然后从其他容器中删除它们
- 如何从其他QLayout中删除QLayout