久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【轉(zhuǎn)】C++STL 常用 函數(shù) 用法

 icecity1306 2015-09-09

學(xué)完c++快一年了,,感覺很有遺憾,因?yàn)橐恢睕]有感覺到c++的強(qiáng)大之處,,當(dāng)時(shí)最大的感覺就是這個(gè)東西的輸入輸出比C語言要簡單好寫,。

  后來我發(fā)現(xiàn)了qt,opencv,,opengl,原來,,c++好玩的狠,。

  在這些圖形庫之外,最常用的可能就是STL,,這個(gè)東西由于當(dāng)時(shí)學(xué)c++的時(shí)候迷迷糊糊,,完全是一頭霧水,上學(xué)期數(shù)據(jù)結(jié)構(gòu)之后開始有點(diǎn)兒開竅了,,現(xiàn)在把才c++STL中常用的函數(shù),,用法貼一下,也是記錄一下,,希望能給一樣迷糊的盆友們一些幫助,。

 

  整理自《ACM程序設(shè)計(jì)》  

 

  迭代器(iterator)

  個(gè)人理解就是把所有和迭代有關(guān)的東西給抽象出來的,,不管是數(shù)組的下標(biāo),指針,,for里面的,、list里面的、vector里面的,,抽象一下變成了iterator

View Code

  

  求和(<numeric> accumulate)

  accumulate(v.begin(),v.end(),0),把從 v.begin() 開始到 v.end()結(jié)束所有的元素加到 0上面去

View Code

 

 

  vector(動(dòng)態(tài)數(shù)組)

  vector有內(nèi)存管理的機(jī)制,,也就是說對(duì)于插入和刪除,vector可以動(dòng)態(tài)調(diào)整所占用的內(nèi)存空間,。  

  vector相關(guān)函數(shù)

View Code

 


  數(shù)組轉(zhuǎn)置 (<algorithm> reverse)

  reverse(v.begin(),v.end())

View Code

  排序(<algorithm> sort)

  sort(v.begin(),v.end())

View Code

  字符串(<string>)

  輸入

View Code

 

  尾部添加字符字符串直接用+號(hào) 例如: s += 'a'; s += "abc",或者使用append方法,,s.append(“123”)

  刪除 (erase clear)

  s.erase(it + 1,it + 4); clear()

View Code

  查找(find)

  用find找到string里面第一個(gè)要找到元素(char或者串),找到返回?cái)?shù)組下標(biāo),,找不到返回end()迭代器

  string和vector有很多相同的東西,,比如length(),size(),,empty(),,reverse(),相對(duì)也容易,,就不一一說了,。

  數(shù)字化處理(string)

  經(jīng)常會(huì)遇到這樣一種情況,有一個(gè)數(shù)字,,需要把每一位給提取出來,,如果用取余數(shù)的方法,花費(fèi)的時(shí)間就會(huì)很長,,所以可以當(dāng)成字符串來處理,,方便、省時(shí),。

  例子:求一個(gè)整數(shù)各位數(shù)的和

View Code

  string與char *

  

View Code

  sscanf

  

View Code

  string與數(shù)值相互轉(zhuǎn)換( sprintf <sstream> )

View Code

 

  set容器

  set是用紅黑樹的平衡二叉索引樹的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的,,插入時(shí),它會(huì)自動(dòng)調(diào)節(jié)二叉樹排列,,把元素放到適合的位置,,確保每個(gè)子樹根節(jié)點(diǎn)的鍵值大于左子樹所有的值、小于右子樹所有的值,,插入重復(fù)數(shù)據(jù)時(shí)會(huì)忽略,。set迭代器采用中序遍歷,檢索效率高于vector,、deque,、list,并且會(huì)將元素按照升序的序列遍歷,。set容器中的數(shù)值,,一經(jīng)更改,,set會(huì)根據(jù)新值旋轉(zhuǎn)二叉樹,以保證平衡,,構(gòu)建set就是為了快速檢索(python中的set一旦建立就是一個(gè)常量,,不能改的)。

  multiset,,與set不同之處就是它允許有重復(fù)的鍵值,。

  正反遍歷,迭代器iterator,、reverse_iterator

View Code

  自定義比較函數(shù),,insert的時(shí)候,set會(huì)使用默認(rèn)的比較函數(shù)(升序),,很多情況下需要自己編寫比較函數(shù),。

  1、如果元素不是結(jié)構(gòu)體,,可以編寫比較函數(shù),,下面這個(gè)例子是用降序排列的(和上例插入數(shù)據(jù)相同):

View Code

 

  2、元素本身就是結(jié)構(gòu)體,,直接把比較函數(shù)寫在結(jié)構(gòu)體內(nèi)部,,下面的例子依然降序:

View Code

  multiset與set的不同之處就是key可以重復(fù),以及erase(key)的時(shí)候會(huì)刪除multiset里面所有的key并且返回刪除的個(gè)數(shù),。

  map

  map也是使用紅黑樹,,他是一個(gè)鍵值對(duì)(key:value映射),便利時(shí)依然默認(rèn)按照key程序的方式遍歷,,同set,。

View Code

  用map實(shí)現(xiàn)數(shù)字分離

  string --> number

  之前用string進(jìn)行過數(shù)字分離,現(xiàn)在使用map

View Code

  number --> string

View Code

  multimap

  multimap由于允許有重復(fù)的元素,,所以元素插入,、刪除、查找都與map不同,。

  插入insert(pair<a,b>(value1,value2))

View Code

  至于刪除和查找,,erase(key)會(huì)刪除掉所有key的map,查找find(key)返回第一個(gè)key的迭代器

  deque

  deque和vector一樣,采用線性表,,與vector唯一不同的是,,deque采用的分塊的線性存儲(chǔ)結(jié)構(gòu),,每塊大小一般為512字節(jié),,稱為一個(gè)deque塊,所有的deque塊使用一個(gè)Map塊進(jìn)行管理,,每個(gè)map數(shù)據(jù)項(xiàng)記錄各個(gè)deque塊的首地址,,這樣以來,,deque塊在頭部和尾部都可已插入和刪除元素,而不需要移動(dòng)其它元素,。使用push_back()方法在尾部插入元素,,使用push_front()方法在首部插入元素,使用insert()方法在中間插入元素,。一般來說,,當(dāng)考慮容器元素的內(nèi)存分配策略和操作的性能時(shí),deque相對(duì)vectore更有優(yōu)勢(shì),。(下面這個(gè)圖,,我感覺Map塊就是一個(gè)list< map<deque名字,deque地址> >)

  插入刪除

  遍歷當(dāng)然可以使用下標(biāo)遍歷,,在這里使用迭代器,。

View Code

  list

  list<int> l

  插入:push_back尾部,push_front頭部,,insert方法前往迭代器位置處插入元素,,鏈表自動(dòng)擴(kuò)張,迭代器只能使用++--操作,,不能用+n -n,,因?yàn)樵夭皇俏锢硐噙B的。

  遍歷:iterator和reverse_iterator正反遍歷

  刪除:pop_front刪除鏈表首元素,;pop_back()刪除鏈表尾部元素,;erase(迭代器)刪除迭代器位置的元素,注意只能使用++--到達(dá)想刪除的位置,;remove(key) 刪除鏈表中所有key的元素,,clear()清空鏈表。

  查找:it = find(l.begin(),l.end(),key)

  排序:l.sort()

  刪除連續(xù)重復(fù)元素:l.unique() 【2 8 1 1 1 5 1】 --> 【 2 8 1 5 1】

  bitset

  從來沒用過,,上兩幅圖吧就:

  stack(后進(jìn)先出)

  這個(gè)印象深刻,,學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候做表達(dá)式求值的就是用的棧。

View Code

 

  stack然我唯一費(fèi)解之處在于,,貌似它沒有iterator,,可以試試s.begin()編譯器報(bào)錯(cuò)的。

  queue(先進(jìn)先出)

  queue有入隊(duì)push(插入),、出隊(duì)pop(刪除),、讀取隊(duì)首元素front、讀取隊(duì)尾元素back,、empty,,size這幾種方法

  priority_queue(最大元素先出)

 

 

 

View Code

  重載操作符同set重載操作符。

原文地址:http://www.cnblogs.com/duoduo369/archive/2012/04/12/2439118.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多