久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > STL教程(十一):C++ STL常用遍歷算法

        STL教程(十一):C++ STL常用遍歷算法

        來(lái)源:千鋒教育
        發(fā)布人:syq
        時(shí)間: 2022-06-22 17:19:57 1655889597

          1、算法概述

          算法主要是由頭文件,和組成。

          是所有STL頭文件中最大的一個(gè),其中常用的功能涉及到比較,交換,查找, 遍歷,復(fù)制,修改,反轉(zhuǎn),排序,合并等...

          體積很小,只包括在幾個(gè)序列容器上進(jìn)行的簡(jiǎn)單運(yùn)算的模板函數(shù).包括加法乘法在序列上的一些操作。

          定義了一些模板類,用以聲明函數(shù)對(duì)象

          STL提供了大量實(shí)現(xiàn)算法的模版函數(shù),只要我們熟悉了STL之后,許多代碼可以被大大的化簡(jiǎn),只需要通過(guò)調(diào)用一兩個(gè)算法模板,就可以完成所需要的功能,從而大大地提升效率。

          2、算法分類

          根據(jù)操作對(duì)象 :

          直接改變?nèi)萜鞯膬?nèi)容

          將原容器的內(nèi)容復(fù)制一份,修改其副本,然后傳回該副本

          根據(jù)功能:

          非可變序列算法 指不直接修改其所操作的容器內(nèi)容的算法

          計(jì)數(shù)算法 count、count_if

          搜索算法 search、find、find_if、find_first_of、…

          比較算法 equal、mismatch、lexicographical_compare

          可變序列算法 指可以修改它們所操作的容器內(nèi)容的算法

          刪除算法 remove、remove_if、remove_copy、…

          修改算法 for_each、transform

          刪除算法 remove、remove_if、remove_copy、…、

          排序算法 包括對(duì)序列進(jìn)行排序和合并的算法、搜索算法以及有序序列上的集合操作

          數(shù)值算法 對(duì)容器內(nèi)容進(jìn)行數(shù)值計(jì)算

          3、常用遍歷算法

          3.1for_each遍歷算法

        /*

        遍歷算法 遍歷容器元素

        @param beg 開始迭代器

        @param end 結(jié)束迭代器

        @param _callback 函數(shù)回調(diào)或者函數(shù)對(duì)象

        @return 函數(shù)對(duì)象

        */

        for_each(iterator beg, iterator end, _callback); 

          使用案例:

        //普通函數(shù) void print01(int val){ 

        cout << val << " "; }//函數(shù)對(duì)象 struct print001{ 

        void operator()(int val)

        cout << val << " "; 

        } };//for_each算法基本用法 void test01(){ 

        vector<int> v; 

        for (int i = 0; i < 10;i++)

        v.push_back(i); 

        }

        //遍歷算法

        for_each(v.begin(), v.end(), print01); 

        cout << endl; 

        for_each(v.begin(), v.end(), print001());

        cout << endl; 

         }

         struct print02{ 

         print02()

         { 

        mCount = 0; 

         }

         void operator()(int val)

         { 

         cout << val << " "; 

         mCount++; 

         }

         int mCount; 

         };

         //for_each返回值

         void test02()

         { 

         vector<int> v; 

         for (int i = 0; i < 10; i++)

         { 

        v.push_back(i); 

         }

         print02 p = for_each(v.begin(), v.end(), print02()); 

         cout << endl; 

         cout << p.mCount << endl; }struct print03 : public binary_function<int, int, void>{ 

         void operator()(int val,int bindParam) const

         { 

        cout << val + bindParam << " "; 

         } 

         };

         //for_each綁定參數(shù)輸出

         void test03(){ 

         vector<int> v; 

         for (int i = 0; i < 10; i++)

         { 

        v.push_back(i); 

         }

         for_each(v.begin(), v.end(), bind2nd(print03(),100)); 

         }

          3.2transform遍歷算法

          transform: 與for_each類似,遍歷所有元素,但可對(duì)容器的元素進(jìn)行修改

          作用:

          可以一個(gè)容器的元素,通過(guò)op,變換到另一個(gè)容器中(同一個(gè)容器中)

          也可以把兩個(gè)容器的元素,通過(guò)op,變換到另一個(gè)容器中

          注意:

          1.如果目標(biāo)與源相同,transform()就和for_each()一樣。

          2.如果想以某值替換符合規(guī)則的元素,應(yīng)使用replace()算法

        /*

        transform算法 將指定容器區(qū)間元素搬運(yùn)到另一容器中

        注意 : transform 不會(huì)給目標(biāo)容器分配內(nèi)存,所以需要我們提前分配好內(nèi)存

        @param beg1 源容器開始迭代器

        @param end1 源容器結(jié)束迭代器

        @param beg2 目標(biāo)容器開始迭代器

        @param _cakkback 回調(diào)函數(shù)或者函數(shù)對(duì)象

        @return 返回目標(biāo)容器迭代器

        */

        transform(iterator beg1, iterator end1, iterator beg2, _callbakc);

          使用案例:

        struct transformTest01{

            int operator()(int val){

                return val + 100;

            }};struct print01{

            void operator()(int val){

                cout << val << " ";

            }};void test01(){

            vector<int> vSource;

            for (int i = 0; i < 10;i ++){

                vSource.push_back(i + 1);

            }

            //目標(biāo)容器

            vector<int> vTarget;

            //給vTarget開辟空間

            vTarget.resize(vSource.size());

            //將vSource中的元素搬運(yùn)到vTarget

            vector<int>::iterator it = transform(vSource.begin(), vSource.end(),

            vTarget.begin(), transformTest01());

            //打印

            for_each(vTarget.begin(), vTarget.end(), print01()); cout << endl;

            }//將容器1和容器2中的元素相加放入到第三個(gè)容器中struct transformTest02{

            int operator()(int v1,int v2){

                return v1 + v2;

            }};void test02(){

            vector<int> vSource1;

            vector<int> vSource2;

            for (int i = 0; i < 10; i++){

                vSource1.push_back(i + 1);

            }

            //目標(biāo)容器

            vector<int> vTarget;

            //給vTarget開辟空間

            vTarget.resize(vSource1.size());

            transform(vSource1.begin(), vSource1.end(),

            vSource2.begin(),vTarget.begin(), transformTest02());

            //打印

            for_each(vTarget.begin(), vTarget.end(), print01()); cout << endl;}

          4、for_each()和transform()算法比較

          for_each() 速度快 不靈活

          transform() 速度慢 非常靈活

          for_each所使用的函數(shù)對(duì)象,參數(shù)是引用,沒有返回值void mysquare(int &num);

          transform所使用的函數(shù)對(duì)象,參數(shù)一般不使用引用,而是還有返回值int mysquare2(int num);

          舉例:

        void mysquare(int &num){

        num = num * num;}int mysquare2(int num) //結(jié)果的傳出,必須是通過(guò)返回值{

        return num = num * num;}void main_foreach_pk_tranform()

        {

         vector<int>  v1;

         v1.push_back(1); 

         v1.push_back(3); 

         v1.push_back(5);

         

         vector<int>v2 = v1;

         for_each(v1.begin(), v1.end(), mysquare);

         printAA(v1);

         cout << endl;

         

         transform(v2.begin(), v2.end(), v2.begin(), mysquare2);

         printAA(v2); 

         cout << endl;

        }

          更多關(guān)于智能物聯(lián)網(wǎng)培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢(mèng)想。

        tags:
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        什么是PlatformIo?

        PlatformIO是什么PlatformIO是一個(gè)全面的物聯(lián)網(wǎng)開發(fā)平臺(tái),它為眾多硬件平臺(tái)和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡(jiǎn)化了開發(fā)過(guò)程,并能兼容各種...詳情>>

        2023-10-14 12:55:06
        云快照與自動(dòng)備份有什么區(qū)別?

        1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時(shí)間點(diǎn)后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動(dòng)備份的主要目標(biāo)...詳情>>

        2023-10-14 12:48:59
        服務(wù)器為什么要用Linux?

        服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn)。包括其...詳情>>

        2023-10-14 12:34:11
        ORM解決的主要問(wèn)題是什么?

        ORM(對(duì)象關(guān)系映射)解決的主要問(wèn)題是將關(guān)系數(shù)據(jù)庫(kù)與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

        2023-10-14 12:26:19
        Go為什么不支持三元運(yùn)算符?

        Go為什么不支持三元運(yùn)算符Go語(yǔ)言是一種以簡(jiǎn)潔和有效性為目標(biāo)的編程語(yǔ)言,因此在設(shè)計(jì)過(guò)程中,Go的設(shè)計(jì)者刻意排除了一些他們認(rèn)為可能導(dǎo)致復(fù)雜性或...詳情>>

        2023-10-14 12:12:36
        花莲县| 黄石市| 手游| 雷山县| 金门县| 温州市| 越西县| 道孚县| 墨竹工卡县| 浮梁县| 驻马店市| 陇南市| 甘德县| 罗定市| 平度市| 繁峙县| 顺昌县| 深圳市| 襄垣县| 西昌市| 故城县| 崇仁县| 合江县| 高雄县| 饶阳县| 昌黎县| 襄樊市| 五原县| 宁城县| 洛阳市| 搜索| 盐池县| 年辖:市辖区| 尚志市| 海盐县| 阿尔山市| 宾川县| 丰镇市| 鹤岗市| 武汉市| 漳平市|