总结一下vector、list、set等常用容器的erase、remove操作的几个坑:
vector<int> nums = { 1, 2, 2, 2, 2, 3, 5 };
for (vector<int>::iterator it = nums.begin(); it != nums.end();) {
if (*it == 2) {
it = nums.erase(it);
}
else {
++it;
}
}
vector<char>vec;
vector<char>::iterator ite;
vector<char>::iterator p;
vec.push_back('A');
vec.push_back('A');
vec.push_back('A');
vec.push_back('B');
vec.push_back('B');
vec.push_back('B');
vec.push_back('B');
vec.push_back('A');
vec.push_back('A');
vec.push_back('A');
p = vec.erase(remove(vec.begin(), vec.end(), 'A'), vec.end());
cout << vec.end() - p << endl;
for (ite = vec.begin(); ite != vec.end(); ++ite)
cout << *ite << " ";
cout << endl;
list<int> List;
for (int i = 0; i < 10; i++)
{
List.push_front(i);
}
List.remove(5);
list<int>::iterator ite2 = List.begin();
while (ite2 != List.end())
{
if (*ite2 % 2 == 0)
{
ite2 = List.erase(ite2);
}
else ite2++;
}
ite2 = List.begin();
while (ite2 != List.end())
{
cout << *ite2 << " ";
ite2++;
}
set<int>s;
for (int i = 10; i; i--)
s.insert(i);
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << "\n*********" << endl;
int i = 0;
for (it = s.begin(); it != s.end();)
{
i++;
if ((*it) % 3 == 0)
s.erase(it++);
else
it++;
}
cout << "\n*********" << endl;
for (it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
参考链接:
https://zhengkang.blog.csdn.net/article/details/92801632
https://blog.csdn.net/cnd2449294059/article/details/75948661
https://blog.csdn.net/hurmishine/article/details/53121359