目录
iterator remove(iterator first, iterator last,val);
iterator remove(iterator first, iterator last,val);
1 功能:
找到原容器在[first, last)迭代器范围中的所有等于val的元素,使用后继非val元素进行覆盖(同范围),返回值为last位置的迭代器。
注意:因为是采取覆盖方式,所以原容器中大小和容量都保持不变。未删除的元素的相对顺序将保持不变,而返回的迭代器和原容器最后一个迭代器之间的元素将保持有效。
2 代码示例:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int>demo{ 1,3,3,4,3,5 };
// 输出操作前vector容器的大小和容量
cout << "操作前的容器大小是:" << demo.size() << endl;
cout << "操作前的容器容量是:" << demo.capacity() << endl;
// 执行remove操作
auto iter = std::remove(demo.begin(), demo.end(), 3);
// 输出操作后vector容器的大小和容量
cout << "操作后的容器大小是:" << demo.size() << endl;
cout << "操作后的容器容量是:" << demo.capacity() << endl;
// 将容器demo中的元素进行输出
cout << "现在容器中的内容为:";
for (auto first = demo.begin(); first < demo.end();++first) {
cout << *first << " ";
}
return 0;
}
输出:
操作前的容器大小是:6
操作前的容器容量是:6
操作后的容器大小是:6
操作后的容器容量是:6
现在容器中的内容为:1 4 5 4 3 5
3 怎样筛选特定值
3.1 仅输出
因为remove返回值为上述last迭代器的位置,所以在只需要配合返回的迭代器即可获取筛选后的容器元素。
3.2 获取删除特定元素的容器
需要配合erase函数使用,
auto iter = std::remove(demo.begin(), demo.end(), val);
demo.erase(iter, demo.end());
示例:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int>demo{ 1,3,3,4,3,5 };
// 执行remove操作
auto iter = std::remove(demo.begin(), demo.end(), 3);
// 1 获取筛选后容器的元素值
cout << "筛选后容器的元素值为:";
for (auto first = demo.begin(); first < iter;++first) {
cout << *first << " ";
}
cout << endl;
// 2 得到删除特定元素的容器
demo.erase(iter, demo.end());
cout << "现在容器中的内容为:";
for (auto first = demo.begin(); first < demo.end();++first) {
cout << *first << " ";
}
return 0;
}
输出:
筛选后容器的元素值为:1 4 5
现在容器中的内容为:1 4 5