假设有这样一个vector<int> vec 1,2,3,1,4,5
vec.erase(2)
返回一个迭代器指向3,也就是被删除元素2的后一位
erase之后vec为
1,3,1,4,5,
vec.remove(3)
将3后面元素往前移动一位
返回一个迭代器指向原尾部元素加一的位置
remove之后vec为
1,1,4,5,5, //返回的迭代器指向最后一位
例子:假设vector是这样的,1,3,1,3,4,5
remove(3)会变成 1,1,4,5,4,5 //返回的迭代器指向第二个4,也就是倒数第二的位置
调用vec.erase(iter,vec.end())删除所有remove中指定的元素 //iter为上一步remove返回的迭代器
之后vec变成
1,1,4,5,
完整代码
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(1);
vec.push_back(4);
vec.push_back(5);
for (auto &&item : vec) {
printf("%d,", item);
}
for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
if (*iter == 2) {
vector<int>::iterator i = vec.erase(iter);
printf("\nerase value 2 return iterator = %d\n", *i);
}
}
printf("after erase 2 \n");
for (auto &&item : vec) {
printf("%d,", item);
}
printf("\n");
auto itre = remove(vec.begin(), vec.end(), 3);
printf("after remove 3,");
printf("return iterator value = %d\n", *itre);
for (auto &&item : vec) {
printf("%d,", item);
}
printf("\n");
vec.erase(itre, vec.end());
printf("after erase remove\n");
for (auto &&item : vec) {
printf("%d,", item);
}
return 0;
网友评论