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

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

生活随笔

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

编程问答

转:STL:string 大小(Size)和容量(Capacity)

發(fā)布時(shí)間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:STL:string 大小(Size)和容量(Capacity) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

strings存在三種“大小”:

1、size()和length()

 返回string中現(xiàn)在的字符個(gè)數(shù)。上述兩個(gè)函數(shù)等效。

成員函數(shù)empty()用來(lái)檢驗(yàn)字符數(shù)是否為0,亦即字符串是否為空。你應(yīng)該優(yōu)先使用該函數(shù),因?yàn)樗萳ength()或size()來(lái)得快。

也就是說(shuō),使用if(s.empty()?==?true)而不使用if(s.size()?==?0)(筆者注)

2、max_size()

  此函數(shù)返回一個(gè)string最多能夠包含的字符數(shù)。一個(gè)string通常包含一塊單獨(dú)內(nèi)存區(qū)塊內(nèi)的所有字符,所以可能跟PC機(jī)器本省的限制有關(guān)系。返回值一般而言是索引型別的最大值減1。之所以“減1”有兩個(gè)原因:(a)最大值本身是npos;(b)在具體實(shí)現(xiàn)中,可因此輕易在內(nèi)部緩沖區(qū)之后添加一個(gè)'\0',以便將這個(gè)string當(dāng)做C-string使用(例如透過(guò)c_str())。一旦某個(gè)操作函數(shù)使用一個(gè)長(zhǎng)度大于max_size()的string,length_error異常就會(huì)被拋出來(lái)。

3、capacity()

重新分配內(nèi)存之前,string所能包含的最大字符數(shù)。

讓string擁有足夠的容量是很重要的,原因有二:

1、重新分配會(huì)造成所有指向string的references,pointer和iterators失效。

2、重新分配(reallocation)很耗時(shí)間。

  因此,如果程序要用到指向string(或其內(nèi)部字符)的references,pointers和iterators。抑或需要很快的執(zhí)行速度,就必須考慮容量(capacity)問(wèn)題。成員函數(shù)reserve()就是用來(lái)避免重分配行為。reserve()使你得以預(yù)留一定容量,并確保該容量尚有余裕之時(shí),reference能夠一直保持有效:

std::string?s;?//?create?empty?string

s.reserve(80);?//?reserve?memory?for?80?characters

  容量概念應(yīng)用于string和應(yīng)用于vector是相同的,但有一個(gè)顯著差異:面對(duì)string你可以調(diào)用reserve()來(lái)縮減實(shí)際容量,而vector的reserve()卻沒(méi)有這項(xiàng)功能。拿一個(gè)“小于現(xiàn)有容量”的參數(shù)來(lái)調(diào)用reserve(),實(shí)際上就是一種非強(qiáng)制性請(qǐng)求(nonbinding?shrink?request)——如果參數(shù)小于現(xiàn)有字符數(shù),則這項(xiàng)請(qǐng)求被視為非強(qiáng)制性適度縮減請(qǐng)求(nonbinding?shrink-to-fit-requset)。也就是說(shuō)你可能想要縮減容量至某個(gè)目標(biāo),但不保證你一定可以如愿。String的reserve()參數(shù)做默認(rèn)值為0,所以調(diào)用reserve()并且不給參數(shù),就是一種“非強(qiáng)制性適度縮減請(qǐng)求”:

s.reserve();?//?"would?like?to?shrink?capacity?to?fit?the?current?size"

  為什縮減動(dòng)作是非強(qiáng)制性的呢?因?yàn)?#34;如何獲取最佳性能"系由實(shí)現(xiàn)者定義。具體實(shí)作string時(shí),如何處理速度和內(nèi)存耗用量之間關(guān)系可能有不同的設(shè)計(jì)思路。因此任何實(shí)作作品都可以以較大的魄力增加容量,并且永不縮減。

  C++Standard規(guī)定,唯有在相應(yīng)reserve()調(diào)用時(shí),容量才可能縮減。因此即使發(fā)生?"字符被刪除或被改變"的事情,任何其他字符只要位于“被操作字符”之前,指向他們身上的那些references、pointer和iterator就仍然保持有效。

備注:本文內(nèi)容摘自《C++標(biāo)準(zhǔn)程序庫(kù)》(侯捷?孟巖譯)

轉(zhuǎn)載于:https://www.cnblogs.com/cchun/archive/2012/06/27/2564573.html

總結(jié)

以上是生活随笔為你收集整理的转:STL:string 大小(Size)和容量(Capacity)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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