/* STL常用算法
* 算法主要是由頭文件<algorithm>、<functional>和<numeric>組成.
* - <algorithm>是所有STL頭文件中最大的一個(gè),范圍涉及到比較、交換、查找、遍歷操作、復(fù)制、修改等;
* - <numeric>體積很小,只包括幾個(gè)在序列上面進(jìn)行簡(jiǎn)單數(shù)學(xué)運(yùn)算的模板函數(shù);
* - <functional>定義了一些模板類,用以聲明函數(shù)對(duì)象.
*
*
* 常用遍歷算法(包含在頭文件<algorithm>中):
* (1)`for_each`,遍歷容器。通過一個(gè)仿函數(shù)或普通函數(shù),在遍歷容器的時(shí)候?qū)υ剡M(jìn)行一些操作;
* - 函數(shù)原型:`for_each(iterator beg, iterator end, _func)`,
* - for_each的前兩個(gè)位置參數(shù),為迭代器位置,后一個(gè)參數(shù)為進(jìn)行操作的函數(shù).
* - 例 `for_each(v.begin(), v.end(), myPrint);`
*
* (2)`transform`,搬運(yùn)一個(gè)容器到另一個(gè)容器中.
* - 函數(shù)原型:`transform(iterator1 beg, iterator1 end, iterator2 beg, _func);`
* - iterator1 beg, iterator1 end為原始迭代器開始和結(jié)束位置;
* - iterator2 beg為目標(biāo)容器迭代器開始位置;
* - _func為函數(shù)或者函數(shù)對(duì)象(仿函數(shù));
* 注:在transform前需要給目標(biāo)容器開辟空間指定大小,如target_vector.resize(10),幾乎說有類似copy操作都需要提前有這個(gè)操作.
*/
一個(gè)栗子:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
// 仿函數(shù)
class myPrint{
public:
void operator()(int v){
cout << v << " ";
}
};
class myAdd{
public:
int operator()(int v){
return v+100;
}
};
int main(){
vector<int> v;
for (int i=0; i<10; i++){
v.push_back(i);
}
// for_each調(diào)用myPrint來實(shí)現(xiàn)打印輸出
for_each(v.begin(), v.end(), myPrint()); // 這里myPrint()是一個(gè)匿名函數(shù)對(duì)象
cout << endl;
// 利用transform來copy到另一個(gè)容器中
vector<int> targetV;
targetV.resize(v.size());
transform(v.begin(), v.end(), targetV.begin(), myAdd());
for_each(targetV.begin(), targetV.end(), myPrint());
}