STL中常用的算法的使用(三):移除型算法

移除型算法

  • remove():将等于某特定值的元素全部移除(注意不改变原容器大小,类似于往前挪)
  • remove_if():将满足特定准则的元素全部移除(注意不改变原容器大小,类似于往前挪)
  • remove_copy():将等于某特定值的元素全部复制到另一个容器
  • remove_copy_if():将满足特定准则的元素全部复制到另一个容器
  • unique(): 移除相邻的重复元素(值相等),同样的不改变容器大小,只移动迭代器。
  • unique_copy():移除相邻元素并复制到目标容器

移除型算法是一种特殊的更易型算法,它们可以移除区间内的元素,也可以在复制过程中执行移除动作。

//对于每个测试函数, 导入以下头文件
#include 
#include 
#include 
using namespace std;

remove():将等于某特定值的元素全部移除(注意不改变原容器大小,类似于往前挪)

int main()
{
	vector<int> a{ 1, 2, 4, 4, 5, 4, 8, 10 };
	auto it = remove(begin(a), a.end(), 4);
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });
	cout << endl;

	a.erase(it,a.end());
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });
}

在这里插入图片描述

remove_if():将满足特定准则的元素全部移除(注意不改变原容器大小,类似于往前挪)

int main()
{
	vector<int> a{ 1, 2, 4, 4, 5, 4, 8, 10 };
	auto it = remove_if(begin(a), a.end(), [](int i) {return i - 4 <= 0; });
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });
	cout << endl;

	a.erase(it,a.end());
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });
}

在这里插入图片描述

remove_copy():将等于某特定值的元素全部复制到另一个容器

int main()
{
	vector<int> a{ 1, 2, 4, 4, 5, 4, 8, 10 },b;
	remove_copy(begin(a), a.end(),back_inserter(b), 4);
	for_each(b.begin(), b.end(), [](int i) {cout << i << ' '; });
}

在这里插入图片描述

remove_copy_if():将满足特定准则的元素全部复制到另一个容器

int main()
{
	vector<int> a{ 1, 2, 4, 4, 5, 4, 8, 10 },b;
	remove_copy_if(begin(a), a.end(),back_inserter(b), [](int i) {return i - 4 <= 0; });
	for_each(b.begin(), b.end(), [](int i) {cout << i << ' '; });
}

在这里插入图片描述

unique(): 移除相邻的重复元素(值相等),同样的不改变容器大小,只移动迭代器。

int main()
{
	vector<int> a{ 1, 2, 4, 4, 5, 4, 8, 10 };
	auto it = unique(begin(a), a.end());  //返回最终迭代器位置
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });
	cout << endl;
	a.erase(it, a.end());
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });
}

在这里插入图片描述

unique_copy():移除相邻元素并复制到目标容器

int main()
{
	vector<int> a{ 1, 2, 4, 4, 5, 4, 8, 10 },b;
	unique_copy(begin(a), a.end(),back_inserter(b));
	for_each(a.begin(), a.end(), [](int i) {cout << i << ' '; });  //copy都不影响原容器
	cout << endl;
	for_each(b.begin(), b.end(), [](int i) {cout << i << ' '; });
}

在这里插入图片描述

你可能感兴趣的:(C++学习,算法,c++,leetcode,STL)