/* STL常用算法
* 算法主要是由頭文件<algorithm>、<functional>和<numeric>組成.
* - <algorithm>是所有STL頭文件中最大的一個,范圍涉及到比較厂画、交換、查找招刹、遍歷操作、復制渣锦、修改等男韧;
* - <numeric>體積很小,只包括幾個在序列上面進行簡單數(shù)學運算的模板函數(shù)葛圃;
* - <functional>定義了一些模板類千扔,用以聲明函數(shù)對象.
*
*
* 常用遍歷算法(包含在頭文件<algorithm>中):
* (1)`for_each`,遍歷容器库正。通過一個仿函數(shù)或普通函數(shù)曲楚,在遍歷容器的時候?qū)υ剡M行一些操作;
* - 函數(shù)原型:`for_each(iterator beg, iterator end, _func)`褥符,
* - for_each的前兩個位置參數(shù)龙誊,為迭代器位置,后一個參數(shù)為進行操作的函數(shù).
* - 例 `for_each(v.begin(), v.end(), myPrint);`
*
* (2)`transform`喷楣,搬運一個容器到另一個容器中.
* - 函數(shù)原型:`transform(iterator1 beg, iterator1 end, iterator2 beg, _func);`
* - iterator1 beg, iterator1 end為原始迭代器開始和結(jié)束位置趟大;
* - iterator2 beg為目標容器迭代器開始位置;
* - _func為函數(shù)或者函數(shù)對象(仿函數(shù))铣焊;
* 注:在transform前需要給目標容器開辟空間指定大小护昧,如target_vector.resize(10),幾乎說有類似copy操作都需要提前有這個操作.
*/
一個栗子:
#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來實現(xiàn)打印輸出
for_each(v.begin(), v.end(), myPrint()); // 這里myPrint()是一個匿名函數(shù)對象
cout << endl;
// 利用transform來copy到另一個容器中
vector<int> targetV;
targetV.resize(v.size());
transform(v.begin(), v.end(), targetV.begin(), myAdd());
for_each(targetV.begin(), targetV.end(), myPrint());
}