STL——拷贝、替换、算术生成、集合算法

1.copy()

2.replace()

3.replace_if()

cpp 复制代码
class MyCompare
{
public:
	bool operator()(const int val)
	{
		return val > 5;
	}
};
void MyPrint(int val)
{
	cout << val << " ";
}
void test01()
{
	vector<int> v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	cout << "替换前:" << endl;
	for_each(v1.begin(), v1.end(), MyPrint);
	cout << endl;
	replace_if(v1.begin(), v1.end(), MyCompare(), 30);//将大于五的数全都替换为30
	cout << "替换后:" << endl;
	for_each(v1.begin(), v1.end(), MyPrint);
	cout << endl;
}

4.swap()

5.算术生成算法

5.1accumulate()

返回的是value+区间和

5.2fill()

向区间填充value值

cpp 复制代码
void MyPrint(int val)
{
	cout << val << " ";
}
void test01()
{
	vector<int> v1;
	v1.resize(10);
	fill(v1.begin(), v1.end(), 100);//将v1全部填充100
	for_each(v1.begin(), v1.end(), MyPrint);
}

6.常用集合算法

6.1set_intersection()//交集

cpp 复制代码
void MyPrint(int val)
{
	cout << val << " ";
}
void test01()
{
	vector<int> v1;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
		v2.push_back(i + 5);
	}
	for_each(v1.begin(), v1.end(), MyPrint);
	cout << endl;//0 1 2 3 4 5 6 7 8 9
	for_each(v2.begin(), v2.end(), MyPrint);
	cout << endl;//5 6 7 8 9 10 11 12 13 14
	vector<int> v3;
	v3.resize(min(v1.size(), v2.size()));
	auto it=set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());//返回交集最后一个元素的地址
	for_each(v3.begin(),it, MyPrint);//5 6 7 8 9
	cout << endl;
}

6.2set_union()//并集

v3.resize(v1.size()+v2.size());

6.3set_difference()//差集

cpp 复制代码
void MyPrint(int val)
{
	cout << val << " ";
}
void test01()
{
	vector<int> v1;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
		v2.push_back(i + 5);
	}
	for_each(v1.begin(), v1.end(), MyPrint);
	cout << endl;//0 1 2 3 4 5 6 7 8 9
	for_each(v2.begin(), v2.end(), MyPrint);
	cout << endl;//5 6 7 8 9 10 11 12 13 14
	vector<int> v3;
	v3.resize(v1.size());
	cout << "v1-v2" << endl;//v1-v2
	auto it=set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());//返回交集最后一个元素的地址
	for_each(v3.begin(),it, MyPrint);
	cout << endl;

	v3.resize(v2.size());
	cout << "v2-v1" << endl;//v2-v1
	it = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), v3.begin());//返回交集最后一个元素的地址
	for_each(v3.begin(), it, MyPrint);
	cout << endl;
}
相关推荐
小刘鸭地下城1 分钟前
哈希表核心精要:从 O(1) 原理到链式地址与开放寻址
算法
感哥6 分钟前
C++ std::vector
c++
zl_dfq15 分钟前
C++ 之【C++11的简介】(可变参数模板、lambda表达式、function\bind包装器)
c++
每天回答3个问题18 分钟前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
BenChuat25 分钟前
Java常见排序算法实现
java·算法·排序算法
凯子坚持 c27 分钟前
精通 Redis list:使用 redis-plus-plus 的现代 C++ 实践深度解析
c++·redis·list
伍哥的传说31 分钟前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
元亓亓亓1 小时前
LeetCode热题100--105. 从前序与中序遍历序列构造二叉树--中等
算法·leetcode·职场和发展
小莞尔1 小时前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
纪元A梦1 小时前
贪心算法在SDN流表优化中的应用
算法·贪心算法