日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

###《Effective STL》--Chapter2

發(fā)布時(shí)間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ###《Effective STL》--Chapter2 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊查看Evernote原文。

#@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com

Chapter2 vector和string

Topic 15: 注意string實(shí)現(xiàn)的多樣性

  string可能有多種不同的實(shí)現(xiàn)。文中介紹了四種,由于采用不同的實(shí)現(xiàn),使用sizeof(string)計(jì)算會(huì)得到不同的值。
  在這四種實(shí)現(xiàn)中,string對(duì)象的大小可以是一個(gè)char*指針大小的1到7倍。并且,各種實(shí)現(xiàn)的動(dòng)態(tài)內(nèi)存分配也不盡相同,可能需要1到2次的動(dòng)態(tài)內(nèi)存分配。

例子 :
  其中一種實(shí)現(xiàn)提供了對(duì)小字符串的性能優(yōu)化。首先,這個(gè)string占據(jù)了7倍char*的空間,是實(shí)現(xiàn)中空間最大的,其中有4倍空間是用來(lái)存儲(chǔ)字符,最多15個(gè)字符,這樣當(dāng)字符小于16個(gè)時(shí),不需要?jiǎng)討B(tài)分配內(nèi)存;如果,超過(guò)15個(gè)字符,則會(huì)動(dòng)態(tài)分配內(nèi)存,并將地址存儲(chǔ)在x4空間的頂端。

Topic 17: 使用swap技巧除去多余的容量

  vector使用reserve預(yù)先申請(qǐng)空間時(shí),可能申請(qǐng)的很大,如何去除多余的空間呢。使用swap技巧可以有效解決這個(gè)問(wèn)題。用已有vector去初始化一個(gè)臨時(shí)向量,并進(jìn)行交換,最后交換后臨時(shí)向量被析構(gòu)(先前的已有向量)。注意,這里的除去多余容量不是全部空余向量,因?yàn)榫幾g器可能保持一些空間以保證空間為2的乘冪數(shù)。
  
  同樣,也可以使用swap技巧去清空vector和string。

vector<int> vi; vi.reserve(100000); //....插入元素操作 //使用swap交換 vector<int>(vi).swap(vi); //清空 vector<int>().swap(vi); string str("afdsaf"); string().swap(str);

Topic 18: 避免使用vector<bool>

  使用vector<bool>可能和你期望得到的結(jié)果不同,它不能稱(chēng)得上真正的容器。一般取得一個(gè)容器元素的地址會(huì)返回一個(gè)指向容器中元素類(lèi)型的指針,而vector<bool>卻是返回一個(gè)代理對(duì)象。

  原因在于,vector<bool>采用緊湊型存儲(chǔ),即一個(gè)bool只占用一位(bit)。一個(gè)8位的字節(jié)(byte)可以存放8個(gè)bool,那么返回的指針會(huì)指向單個(gè)位,而指向單個(gè)位(bit)是被禁止的,為了避免這個(gè)問(wèn)題,會(huì)用一個(gè)代理對(duì)象包裝,所以會(huì)莫名其妙地產(chǎn)生一個(gè)新的對(duì)象。

解決方法

  • 使用deque<bool>,deque確實(shí)存儲(chǔ)bool。
  • 使用bitset,bitset使用緊湊表示,無(wú)法動(dòng)態(tài)增刪。

轉(zhuǎn)載于:https://www.cnblogs.com/gr-nick/p/3979842.html

總結(jié)

以上是生活随笔為你收集整理的###《Effective STL》--Chapter2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。