// v.erase(it) 是用后面的元素依次递补被删掉的元素
// 会造成当前迭代器访问不了后面的数据(前面的没有失效),这时可以令当前
// 迭代器等于返回的迭代器(被删元素的下一个)
vector<int> v = {4,3,9,9,2,5,9};
for (auto it = v.begin(); it != v.end();)
{
if (*it == 9)
it = v.erase(it);
else
++it;
}
// remove在algorithm里面,它实际上是将范围内的 所有要删除的元素以此用后面的元素补上,然后返回
// 当前新vector的end
vec.erase(remove(vec.begin(), vec.end(), 3), vec.end());
// 如果删除某个元素,所有容器(除了vector和deque)保证迭代器以及用以指向其他元素的引用继续保持有 // 效。对于vector而言,只有被删除元素之前的迭代器、指针和引用有效,被删除元素以及被删除元素之后的 // 迭代器、指针和引用均会失效。
// 如果插入某个元素,只有list、forward_list和关联式容器(map/multimap、set/multiset)可以保证 // 原本的迭代器和指向元素的引用继续保持有效。
// 对于vector而言,只有当插入操作不会造成内存的重新分配(也就是元素的个数不会超过vector的容 // 量capacity),插入位置之前的迭代器依然有效,插入位置之后的迭代器失效
谈谈C++中vector的删除_lishichengyan的博客-CSDN博客_vector 删除
C++中vector迭代器失效问题以及删除所有带有某值的元素_mingwu96的博客-CSDN博客_vector迭代器删除元素