黑馬C++視頻筆記《STL之遍歷算法》

/* 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());
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容