9.变异算法

序号

功能

函数名称

说明

1

复制

copy:

从序列的第一个元素起进行复制

copy_backward

从序列的最后一个元素起进行复制

2

交换

swap

交换两个元素

swap_ranges

交换指定范围的元素

iter_swap

交换由迭代器所指的两个元素

3

变换

transform

将某操作应用于指定范围的每个元素

4

替换

replace

用一个给定值替换一些值

replace_if

替换满足谓词的一些元素

replace_copy

复制序列时用一给定值替换元素

replace_copy_if

复制序列时替换满足谓词的元素

5

填充

fill

fill_n

用一给定值取代所有元素

用一给定值取代前n个元素

6

生成

generate

用一操作的结果取代所有元素

generate_n

用一操作的结果取代前n个元素

7

删除

remove

删除具有给定值的元素

remove_if

删除满足谓词的元素

remove_copy

复制序列时删除具有给定值的元素

remove_copy_if

复制序列时删除满足谓词的元素

8

唯一

unique

删除相邻的重复元素

unique_copy

复制序列时删除相邻的重复元素

9

反转

reverse

反转元素的次序

reverse_copy

复制序列时反转元素的次序

10

环移

rotate

循环移动元素

rotate_copy

复制序列时循环移动元素

11

随机

random_shuffle

采用均匀分布来随机移动元素

12

划分

partition

将满足某谓词的元素都放到前面

stable_partition

将满足某谓词的元素都放到前面并维持原顺序


1、copy

#include<iostream>
#include<iterator>
using namespace std;
int main()
{
	int a[] = { 1, 2, 3, 4, 5 };
	int b[5];

	copy(a, a + 5, b);
	copy(a, a + 5, ostream_iterator<int>(cout, " "));
	cout << endl;
	copy(b, b + 5, ostream_iterator<int>(cout, " "));
}

2、交换swap()  swap_ranges()

#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;

int main()
{
	int a1 = 9;
	int b1 = 4;

	int a2[] = { 1, 2, 3, 4, 5 };
	int b2[] = { 6, 7, 8, 9, 10 };

	vector<int> v1{ 1, 2, 3 };
	vector<int> v2{ 4, 5, 6, 5, 7 };

	swap(a1, b1);
	cout << "交换后:" << a1 <<"  "<< b1 << endl;

	//数组交换只能使用swap_ranges(),不能使用swap() ,vector都可以使用
	swap_ranges(a2, a2 + 5, b2);
	cout << endl<<"交换后a2:";
	copy(a2, a2 + 5, ostream_iterator<int>(cout, " "));
	cout << endl << "交换后b2:";
	copy(b2, b2 + 5, ostream_iterator<int>(cout, " "));

	swap(v1, v2);
	cout << endl;
	copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));

}

3、变换

#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
#include<functional>
using namespace std;

int main()
{
	int a[] = { 1, 2, 3, 4, 5 };
	vector<int>v1(a, a + 5);
	vector<int>v2(5);

	cout << "v1*2-->v2= ";
	transform(v1.begin(), v1.end(), v2.begin(), bind2nd(multiplies<int>(), 2));
	copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));
}

4、替换

#include<iostream>  
#include<vector>  
#include<algorithm>  
#include<iterator>  
#include<functional>  
using namespace std;

int main()
{
	vector<int>v{ 1, 2, 3, 4, 5, 4, 3, 2, 1 };
	//将所有2换成10
	vector<int>v1(v);
	replace(v1.begin(), v1.end(), 2, 10);
	copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

	//小于4的用20替换
	vector<int>v2(v);
	replace_if(v2.begin(), v2.end(), bind2nd(less<int>(), 4), 20);
	copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

	//replace_copy可以复制到一个新的向量替换  因为v4容量大小没有所以用back_inserter()
	vector<int>v3(v);
	vector<int>v4;
	replace_copy(v3.begin(), v3.end(), back_inserter(v4), 4, 30);
	copy(v3.begin(), v3.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	copy(v4.begin(), v4.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

	//还有一个replace_copy_if()
}

5、填充

fill()与fill_n()

vector<int>v1(5);
fill(v1.begin(),v1.end(),10);

//v2填充5个10
vector<int>v2;
fill_n(v2.begin(),v2.end(),5,10)

6、生成

//用一操作的结果取代所有元素
generate(v1.begin(),v1.end(),fun)

//用一操作的结果取代前n个元素
generate_n()

7、删除

#include<iostream>  
#include<vector>  
#include<algorithm>  
#include<iterator>  
#include<functional>  
using namespace std;

int main()
{
	vector<int>v1{ 1, 2, 2, 4, 5, 4, 3, 2, 1 };
	vector<int>::iterator last;
	last = remove(v1.begin(), v1.end(), 2);

	cout << "删除后v1:";
	copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));//145431321
	cout << endl;

	//删除后有效v1
	copy(v1.begin(), last, ostream_iterator<int>(cout, " ")); //145431
	cout << endl;

	vector<int>v2{ 1, 2, 3, 4, 5 };
	vector<int>v3(v2);
	last = remove_copy(v2.begin(), v2.end(), v2.begin(), 3);
	copy(v2.begin(),last, ostream_iterator<int>(cout, " "));//1245

	cout << endl;
	vector<int>v4;
	remove_copy(v3.begin(), v3.end(), back_inserter(v4), 3);
	copy(v4.begin(), v4.end(), ostream_iterator<int>(cout, " "));//1245

}


8、唯一

//删除相邻的重复元素	
unique(v.begin(),v.end());

//复制序列时删除相邻的重复元素
unique_copy(v.begin(),v.end(),back_inserter(v1));

9、反转

//反转所有元素的次序	
reverse(v.begin(),v.end());

//复制次序时反转元素次序
reverse_copy(v.begin(),v.end(),back_inserter(v1));

10、环移

//循环移动元素	
rotate(v.begin(),v.begin()+1,v.end());

//复制次序时循环移动元素
rotate_copy();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值