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 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
wheeldown4 小时前
【数据结构】选择排序
数据结构·算法·排序算法
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
青花瓷5 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode