remove
① 查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素
② remove返回值 = “指向最后一个 ‘有用’ 元素的iterator”
③ remove并没有改变原容器的size,以及end(),并没有真正的删除元素
举例说明:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
//Lambda表达式:配合for_each,用于打印数组中的所有元素
auto LmdPrint = [](int x)->void { cout << x << " "; };
vector<int> Numbers = { 1, 2, 1, 2, 2, 1, 3 };
cout << "调用remove前:";
for_each(Numbers.begin(), Numbers.end(), LmdPrint);
//删除值为 2 的元素
vector<int>::iterator ret = remove(Numbers.begin(), Numbers.end(), 2);
cout << "\n调用remove后:";
for_each(Numbers.begin(), Numbers.end(), LmdPrint);
cout << "\n迭代器索引" << ret - Numbers.begin() << " = " << *ret << endl;
system("pause");
}
erase函数介绍:
// 删除从first到last之间的所有元素
iterator erase(iterator first, iterator last);
条款32
:remove+erase才能”真正的“删除vector中值为val的所有元素
vec.erase(remove(vec.begin(), vec.end(), 待删除元素val
, vec.end());