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;
}
相关推荐
栀寒老醑9 小时前
Python实现的服务器日志监控脚本
开发语言·python
星星点点洲9 小时前
PostgreSQL 15二进制文件
开发语言·设计模式·golang
小糖学代码9 小时前
Linux:11.线程概念与控制
linux·服务器·c语言·开发语言·c++
科研小白_10 小时前
基于遗传算法优化BP神经网络(GA-BP)的数据时序预测
人工智能·算法·回归
Terry Cao 漕河泾10 小时前
基于dtw算法的动作、动态识别
算法
yaoxin52112310 小时前
211. Java 异常 - Java 异常机制总结
java·开发语言·python
Larry_Yanan12 小时前
QML学习笔记(四十)QML的ApplicationWindow和StackView
c++·笔记·qt·学习·ui
Empty_77712 小时前
编程之python基础
开发语言·python
疯狂吧小飞牛12 小时前
Lua 中的 __index、__newindex、rawget 与 rawset 介绍
开发语言·junit·lua
Miraitowa_cheems13 小时前
LeetCode算法日记 - Day 73: 最小路径和、地下城游戏
数据结构·算法·leetcode·职场和发展·深度优先·动态规划·推荐算法