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