1. 简介
1.1 填充
函数 |
作用 |
文档 |
fill(beg,end,val) |
将值val 赋给[beg ,end )范围内的所有元素。 |
fill() |
fill_n(beg,n,val) |
将值val 赋给[beg ,beg+n )范围内的所有元素。 |
fill_n() |
generate(beg,end,func) |
连续调用函数func 填充[beg ,end )范围内的所有元素。 |
generate() |
generate_n(beg,n,func) |
连续调用函数func 填充[beg ,beg+n )范围内的所有元素。 |
generate_n() |
-
fill()
/fill_n()
用于填充相同值,generate()
/generate_n()
用于填充不同值。
1.2 遍历/变换
函数 |
作用 |
文档 |
for_each(beg,end,func) |
将[beg ,end )范围内所有元素依次调用函数func ,返回func 。不修改序列中的元素。 |
for_each() |
transform(beg,end,res,unary) |
将[beg ,end )范围内所有元素依次调用函数unary ,结果放入res 中。 |
transform() |
transform(beg2,end1,beg2,res,binary) |
将[beg ,end )范围内所有元素与[beg2 ,beg2+end-beg )中所有元素依次调用函数unary ,结果放入res 中。 |
transform() |
2. 示例代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline void Display(int t){
cout << t << " ";
}
int main(){
// 构造函数方式(vector、list、deque都有此构造函数)
vector<int> vec1(10,100);
for_each(vec1.begin(),vec1.end(),Display);
cout<< endl;
// 算法方式
vector<int> vec2(10);
fill(vec2.begin(),vec2.end(),100);
for_each(vec2.begin(),vec2.end(),Display);
cout<< endl;
// 数组方式
int arr[10];
fill(arr,arr+10,100);
for_each(arr,arr+10,Display);
cout<< endl;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline void Display(int t){
cout << t << " ";
}
int main(){
// 构造函数方式(vector、list、deque都有此构造函数)
vector<int> vec1(10,100);
for_each(vec1.begin(),vec1.end(),Display);
cout<< endl;
// 算法方式
vector<int> vec2(10);
fill_n(vec2.begin(),10,100);
for_each(vec2.begin(),vec2.end(),Display);
cout<< endl;
// 数组方式
int arr[10];
fill_n(arr,10,100);
for_each(arr,arr+10,Display);
cout<< endl;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline int Increase(){
static int i = 0;
return i++;
}
inline void Display(int t){
cout << t << " ";
}
int main(){
// 容器方式
vector<int> vec(10);
generate(vec.begin(),vec.end(),Increase);
for_each(vec.begin(),vec.end(),Display);
cout<< endl;
// 数组方式
int arr[10];
generate(arr,arr+10,Increase);
for_each(arr,arr+10,Display);
cout<< endl;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline int Increase(){
static int i = 0;
return i++;
}
inline void Display(int t){
cout << t << " ";
}
int main(){
// 容器方式
vector<int> vec(10);
generate_n(vec.begin(),10,Increase);
for_each(vec.begin(),vec.end(),Display);
cout<< endl;
// 数组方式
int arr[10];
generate_n(arr,10,Increase);
for_each(arr,arr+10,Display);
cout<< endl;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline void Display(int t){
cout << t << " ";
}
int main(){
// 容器方式
vector<int> vec(10,100);
for_each(vec.begin(),vec.end(),Display);
cout<< endl;
// 数组方式
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
for_each(arr,arr+10,Display);
cout<< endl;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline void Display(int t){
cout << t << " ";
}
inline int Increase(int t){
return t+1;
}
inline int Plus(int a,int b){
return a+b;
}
int main(){
// 容器方式
vector<int> vec(10,100);
vector<int> res1(10);
transform(vec.begin(),vec.end(),res1.begin(),Increase);
for_each(res1.begin(),res1.end(),Display);
cout<< endl;
// 数组方式
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int res2[10];
transform(arr,arr+10,res2,Increase);// 可用仿函数
for_each(res2,res2+10,Display);
cout<< endl;
// 容器方式
vector<int> vec1(10,100);
vector<int> vec2(10,1);
vector<int> res3(10);
transform(vec.begin(),vec.end(),vec2.begin(),res3.begin(),Plus);
for_each(res3.begin(),res3.end(),Display);
cout<< endl;
// 数组方式
int arr1[10] = {1,2,3,4,5,6,7,8,9,0};
int arr2[10] = {1,2,3,4,5,6,7,8,9,0};
int res4[10];
transform(arr1,arr1+10,arr2,res4,Plus);// 可用仿函数
for_each(res4,res4+10,Display);
cout<< endl;
}
3. 练习
- 把一个26字符大小的数组/向量填充26个英文字母。
- 字符串大小写转换(提示
transform
)