1. 簡(jiǎn)介
1.1 填充
| 函數(shù) |
作用 |
文檔 |
fill(beg,end,val) |
將值val賦給[beg,end)范圍內(nèi)的所有元素。 |
fill() |
fill_n(beg,n,val) |
將值val賦給[beg,beg+n)范圍內(nèi)的所有元素。 |
fill_n() |
generate(beg,end,func) |
連續(xù)調(diào)用函數(shù)func填充[beg,end)范圍內(nèi)的所有元素。 |
generate() |
generate_n(beg,n,func) |
連續(xù)調(diào)用函數(shù)func填充[beg,beg+n)范圍內(nèi)的所有元素。 |
generate_n() |
-
fill()/fill_n()用于填充相同值,generate()/generate_n()用于填充不同值。
1.2 遍歷/變換
| 函數(shù) |
作用 |
文檔 |
for_each(beg,end,func) |
將[beg,end)范圍內(nèi)所有元素依次調(diào)用函數(shù)func,返回func。不修改序列中的元素。 |
for_each() |
transform(beg,end,res,unary) |
將[beg,end)范圍內(nèi)所有元素依次調(diào)用函數(shù)unary,結(jié)果放入res中。 |
transform() |
transform(beg2,end1,beg2,res,binary) |
將[beg,end)范圍內(nèi)所有元素與[beg2,beg2+end-beg)中所有元素依次調(diào)用函數(shù)unary,結(jié)果放入res中。 |
transform() |
2. 示例代碼
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
inline void Display(int t){
cout << t << " ";
}
int main(){
// 構(gòu)造函數(shù)方式(vector、list、deque都有此構(gòu)造函數(shù))
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;
// 數(shù)組方式
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(){
// 構(gòu)造函數(shù)方式(vector、list、deque都有此構(gòu)造函數(shù))
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;
// 數(shù)組方式
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;
// 數(shù)組方式
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;
// 數(shù)組方式
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;
// 數(shù)組方式
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;
// 數(shù)組方式
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int res2[10];
transform(arr,arr+10,res2,Increase);// 可用仿函數(shù)
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;
// 數(shù)組方式
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);// 可用仿函數(shù)
for_each(res4,res4+10,Display);
cout<< endl;
}
3. 練習(xí)
- 把一個(gè)26字符大小的數(shù)組/向量填充26個(gè)英文字母。
- 字符串大小寫轉(zhuǎn)換(提示
transform)