序号 |
功能 |
函数名称 |
说明 |
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();