【c++】算法(二)

一、常用拷贝和替换算法

1.copy

功能:将容器中指定范围的元素复制到另外一个容器中

copy (v.begin ( ) , v.end ( ) , vvv.begin ( ) ) ,vvv代表目标容器

当然实际上直接v2=v1 ,一个赋值操作直接结束了(这样更简单)

vector <int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);

vector <int>vvv;
vvv.resize(v.size());
copy(v.begin(), v.end(), vvv.begin());
for_each(vvv.begin(), vvv.end(), print);

2.replace

功能:把指定的旧元素替换成新元素

replace (v.begin ( ) ,v.end ( ) ,oldvalue , newvalue )

注意如果出现多个oldvalue 会把所有的oldvalue 都替换成新的值

vector <int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);

cout << "替换前" << endl;
for_each(v.begin(), v.end(), print);

cout << "替换后" << endl;
replace(v.begin(), v.end(), 3, 3333);
for_each(v.begin(), v.end(), print);

3.replace_if

功能:在指定的条件下进行替换元素

与replace不同的是,这个需要把oldplace换成一个谓词 

replace (v.begin ( ) ,v.end ( ) , pre , newvalue);

其中谓词(就是一个bool类型的函数)可以这么写

3.swap

功能:交换两个同类型的容器

swap (v1 , v2 )

二、常用的算术生成器

注意加头文件  #include <numeric>

1.accumulate

功能: 累加容器中元素

accumulate ( v.begin( ) , v.end ( ) , num ) ,num代表起始的累加值

	vector <int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	int total = accumulate(v.begin(), v.end(),0);

2.fill

向容器填充指定的元素

fill ( v,begin ( ) , v.end ( ) , num ) , num是要填充的值

三、常用的集合算法

1.set_itersection

功能:求两个容器的交集

set_itersection ( v1.begin ( ) ,v1.end ( ) ,v2.begin ( ) ,v2.end ( ) ,target.begin ( ) )

其中v1,v2分别代表要相交集的容器,target表示目标容器

	vector <int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	vector <int > vvv;
	for (int j = 5; j < 15; j++)
	{
		vvv.push_back(j);
	}

	vector <int> t;
	t.resize(min(v.size() ,vvv.size()));
	vector <int>::iterator m=set_intersection(v.begin(), v.end(), vvv.begin(), vvv.end(), t.begin());

	for_each(t.begin(), m, print);

同时注意:1. v1和v2容器中的元素必须是有序的

                  2. 最后打印的时候是  for_each(t.begin(), m, print);

注意第二个参数是sset_itersection返回的迭代器,不是t.end( ) 

2.set_union

功能:求两个容器的并集

set_union ( v1.begin ( ) ,v1.end ( ) ,v2.begin ( ) ,v2.end ( ) ,target.begin ( ) )

v1 和v2也都必须是有序容器

3.set_difference

功能:求两个容器的差集(即v2中有哪些元素v1没有)

set_difference ( v1.begin ( ) ,v1.end ( ) ,v2.begin ( ) ,v2.end ( ) ,target.begin ( ) )

v1 和v2也都必须是有序容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值