国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

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

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

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

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

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

              1、算法概述

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

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

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

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

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

              2、算法分類

              根據(jù)操作對象 :

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

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

              根據(jù)功能:

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

              計數(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、…、

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

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

              3、常用遍歷算法

              3.1for_each遍歷算法

            /*

            遍歷算法 遍歷容器元素

            @param beg 開始迭代器

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

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

            @return 函數(shù)對象

            */

            for_each(iterator beg, iterator end, _callback); 

              使用案例:

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

            cout << val << " "; }//函數(shù)對象 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類似,遍歷所有元素,但可對容器的元素進行修改

              作用:

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

              也可以把兩個容器的元素,通過op,變換到另一個容器中

              注意:

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

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

            /*

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

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

            @param beg1 源容器開始迭代器

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

            @param beg2 目標容器開始迭代器

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

            @return 返回目標容器迭代器

            */

            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);

                }

                //目標容器

                vector<int> vTarget;

                //給vTarget開辟空間

                vTarget.resize(vSource.size());

                //將vSource中的元素搬運到vTarget

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

                vTarget.begin(), transformTest01());

                //打印

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

                }//將容器1和容器2中的元素相加放入到第三個容器中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);

                }

                //目標容器

                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ù)對象,參數(shù)是引用,沒有返回值void mysquare(int &num);

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

              舉例:

            void mysquare(int &num){

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

            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)培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經(jīng)驗,采用全程面授高品質(zhì)、高體驗培養(yǎng)模式,擁有國內(nèi)一體化教學管理及學員服務,助力更多學員實現(xiàn)高薪夢想。

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

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

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

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

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

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

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

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

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

            Go為什么不支持三元運算符Go語言是一種以簡潔和有效性為目標的編程語言,因此在設(shè)計過程中,Go的設(shè)計者刻意排除了一些他們認為可能導致復雜性或...詳情>>

            2023-10-14 12:12:36