STL 中元素删除相关算法

remove

①.头文件

remove 算法定义在头文件 #include 中。

②.算法作用

remove 算法不会改变序列的大小,是通过后面元素往前覆盖实现的,返回新序列有效值的下一个迭代器。

③.代码示例

vector<int> vec = { 1,2,3,6,3,7,3,8,9 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i<< " "; });
    
auto iter = remove(vec.begin(), vec.end(), 3);
    
cout << endl <<  "remove 后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
    
vec.erase(iter, vec.end());
cout << endl << "新序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

remove_if

①.头文件

remove_if 算法定义在头文件 #include 中。

②.算法作用

remove_if 算法是 remove 的升级版本,可以通过指定一个一元谓词来决定是否移除一个元素,执行结果同 remove 。

③.代码示例

vector<int> vec = { 1,2,3,6,3,7,3,8,9 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i<< " "; });
    
vec.erase(remove_if(vec.begin(), vec.end(), [](int i) { return i < 4; }), vec.end());
cout << endl << "新序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

remove_copy

①.头文件

remove_copy 算法定义在头文件 #include 中。

②.算法作用

remove_copy 算法执行结果是把删除指定元素后的剩余元素拷贝到一个新的序列 。

③.代码示例

vector<int> vec = { 1,2,3,6,3,7,3,8,9 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i<< " "; });
    
vector<int> vec2;
remove_copy(vec.begin(), vec.end(), back_inserter(vec2), 3);
   
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

unique

①.头文件

unique 算法定义在头文件 #include 中。

②.算法作用

unique 算法作用是移除序列中相邻的重复元素,不会改变序列的大小,是通过后面元素往前覆盖实现的,返回新序列有效值的下一个迭代器。

③.代码示例

vector<int> vec = { 1,2,3,3,3,3,3,8,9 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

auto iter = unique(vec.begin(), vec.end());

cout << endl << "remove 后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

vec.erase(iter, vec.end());
cout << endl << "新序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值