STL的出現(xiàn)背景
長(zhǎng)久以來(lái),軟件屆就一直希望建立一種可重復(fù)利用的東西
C++的面向?qū)ο蠛头盒途幊趟枷耄康木褪菑?fù)用性的提升
數(shù)據(jù)結(jié)構(gòu)和算法沒(méi)能有一套標(biāo)準(zhǔn),導(dǎo)致被迫從事大量重復(fù)工作
為了建立數(shù)據(jù)結(jié)構(gòu)和算法的一套標(biāo)準(zhǔn),那么STL就誕生了
STL基本概念
STL全稱:標(biāo)準(zhǔn)模板庫(kù)(Standard Template Library)
STL從廣義上分為:容器(container)算法(algorithm)迭代器(iterator)
容器和算法之間通過(guò)迭代器進(jìn)行無(wú)縫連接
STL幾乎所有的代碼都采用了模板類或者模板函數(shù)
STL六大組件
STL六大組件分別是:容器、算法、迭代器、仿函數(shù)、適配器、空間配置器。
容器:各種數(shù)據(jù)結(jié)構(gòu),如vector、list、deque、set、map等,用來(lái)存放數(shù)據(jù)。
算法:常用的各種算法,如sort、find、copy、for_each等
迭代器:扮演了容器與算法之間的粘合劑,迭代器的使用非常類似于指針,初學(xué)階段我們可以先理解迭代器為指針。
仿函數(shù):行為類似函數(shù),可作為算法的某種策略
適配器:一種用來(lái)修飾容器或者仿函數(shù)或迭代器結(jié)構(gòu)的東西。
空間配置器:負(fù)責(zé)空間的配置與管理。
初識(shí)容器算法迭代器
迭代器種類:
常用的迭代器種類為雙向迭代器,和隨機(jī)訪問(wèn)迭代器。
了解STL容器、算法、迭代器概念之后,我們利用代碼感受STL的魅力
STL中最常用的容器為vector,可以理解為數(shù)組,下面我們將學(xué)習(xí)如何向這個(gè)容器中插入數(shù)據(jù)、并遍歷這個(gè)容器。
vector容器的初次使用
容器: vector
算法: for_each
迭代器:vector::iterator
存放內(nèi)置數(shù)據(jù)類型
首先創(chuàng)建整型的vector容器 ve,將1、0、0、8、6依次尾插入ve容器內(nèi),然后利用迭代器來(lái)訪問(wèn)容器中的數(shù)據(jù),分為while、for、for_each三種循環(huán)方法:
1、while循環(huán)
創(chuàng)建兩個(gè)指針itBegin、itEnd分別指向ve容器的第一個(gè)位置和最后一個(gè)元素的下一個(gè)位置,利用while循環(huán),當(dāng)遞增的itBegin不等于itEnd時(shí),輸出解引用的itBegin,就可以得到該位置對(duì)應(yīng)的數(shù)據(jù),遞增的語(yǔ)句是itBegin++。
2、for循環(huán)
創(chuàng)建一個(gè)指針即可,也是讓指針從begin遞增,在不等于end時(shí)依次解引用輸出數(shù)據(jù)。這個(gè)方法比較方法,我個(gè)人推薦使用
3、for_each循環(huán)
使用for_each循環(huán)需要先引入頭文件#include<algorithm>,這個(gè)頭文件包含了算法里的方法。參數(shù)列表分別是:起始位置,終止位置,打印函數(shù)。所以我定義了一個(gè)printInfo函數(shù)來(lái)不換行打印數(shù)據(jù)。
存放自定義數(shù)據(jù)類型
vector通過(guò)參數(shù)列表里的數(shù)據(jù)類型來(lái)決定容器內(nèi)存放的數(shù)據(jù)類型,這里參數(shù)列表指定時(shí)Person類,那么就可以將創(chuàng)建的對(duì)象p1、p2、p3存入容器內(nèi),再利用for循環(huán)打印數(shù)據(jù)。和上面不同的是,打印姓名身高用的是->操作符,這是因?yàn)閕t相當(dāng)于一個(gè)指針,所以可以直接通過(guò)指針調(diào)用對(duì)象的屬性,當(dāng)然也可以這樣寫:(*t).name,先解引用再調(diào)用的方式也可以。
vector容器的嵌套使用
容器相當(dāng)于一個(gè)數(shù)組,那么數(shù)組嵌套數(shù)組不就是二維數(shù)組嗎,我們來(lái)測(cè)試一下。
創(chuàng)建的這個(gè)V容器,他的參數(shù)列表是vector<int>,那就說(shuō)明該容器存入的是存入整型數(shù)據(jù)的容器,說(shuō)白了就是二維整型數(shù)組。然后先創(chuàng)建小容器并進(jìn)行賦值,再將小容器尾插入大容器內(nèi),調(diào)用自定義的printVector函數(shù)來(lái)打印數(shù)據(jù)。
二維數(shù)組都是兩層for循環(huán)打印,類似的對(duì)于嵌套容器來(lái)說(shuō)也一樣。 第一層for循環(huán)決定著循環(huán)的次數(shù),第二層for循環(huán)的(*T)用到了二級(jí)指針,也就是說(shuō)大容器T指針解引用之后還是一個(gè)小容器的指針,根據(jù)T++這行代碼來(lái)更新指向也就能改變小指針的容器,從而輸出嵌套容器內(nèi)的所有數(shù)據(jù)。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹(shù)莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長(zhǎng)沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營(yíng)網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)