使用find从矢量中清除所有偶数
这个问题在这里已经有了答案:
使用erase(it);
函数迭代器发生了变化,所以您需要将迭代器再次设置为由擦除函数返回的新迭代器。
在你的代码中, if(q == myVec.end())
检查结束,然后使用擦除将会抛出一个错误,因为end()不指向数据,并且能够从迭代器需要有效的向量。 因此,通过将if(q == myVec.end())
更改为if(q == (myVec.end()-1))
,它将允许您删除最后一个元素,以防成对出现。
std::vector::erase
使所有迭代器在删除点之后失效。 你不能继续使用该迭代器,不能增加它,使用它来访问矢量,或者甚至将它与end()
进行比较。
使用正确的算法是std:remove_if
。 与名称不同,它只会将矢量的所有偶数项“移到后面”,而不会使任何迭代器失效。 它会将一个迭代器返回到这个子范围的开始处,然后您可以将其馈送到适当的erase
重载(接受一对迭代器的那个)。
这在代码中已被广泛使用,甚至被命名为“擦除删除语言”。
链接地址: http://www.djcxy.com/p/73343.html