Vector中的reserve裳仆,resize

最近在做項目的時候敲才,看到這樣一個代碼:vector.reserve(mesh.n_vertices())我對這個reserve產(chǎn)生了好奇拒炎,查閱資料后挪拟,對reserve和resize有了更深的理解。

vector

在介紹resize()击你,reserve()玉组,size()和capacity()函數(shù)之前,先簡單介紹一下c++中vector的概念丁侄。

vector:順序容器(可變大小數(shù)組)惯雳。支持快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢鸿摇。

既然vector是個容器石景,那么一定相關(guān)特性,如添加元素拙吉、刪除元素和查詢?nèi)萜鞔笮〉炔僮鞒蹦酢1疚闹攸c介紹vector中的resize(),reserve()庐镐,size()和capacity()函數(shù)恩商。

基本概念

capacity

指容器在分配新的存儲空間之前能存儲的元素總數(shù)。

size

指當前容器所存儲的元素個數(shù)

注:capacity是容器可存儲的最大總數(shù)必逆,size是當前容器存儲的個數(shù)怠堪。

resize

既分配了空間,也創(chuàng)建了對象名眉。默認初始化為0

這里空間就是capacity粟矿,對象就是容器中的元素。

reserve

reserve()表示容器預(yù)留空間损拢,但不是真正的創(chuàng)建對象陌粹,需要通過insert()或push_back()等操作創(chuàng)建對象。

其實size()和capacity()沒有更多需要介紹的地方福压,大家平時coding時直接調(diào)用即可掏秩。當然size()的使用頻率相當高或舞,通常進行遍歷操作時,最外層的for循環(huán)的次數(shù)即為size()蒙幻。

reserve或resize的意義

我們都知道映凳,vector是一個可變大小的容器,不管你用不用reserve或者resize邮破,你都可以使用push_back()函數(shù)往容器里添加元素诈豌,但是stl中為什么要有reserve或者resize呢?

因為當你push_back()時抒和,如果size將要超過capacity矫渔,那么vector就會為你動態(tài)分配內(nèi)存,通過一組實驗結(jié)果可以看到摧莽,大小是capacity的一半庙洼。

int nums = 20;
for (int i = 0; i < nums; ++i){
    v2.push_back(i+1);
    cout << "v2_size: " << v2.size() << "\t v2_capacity: " << v2.capacity() << endl;
}

讓我們直接看結(jié)果:

v2_size: 2 , v2_capacity: 2

v2_size: 3 范嘱, v2_capacity: 3

v2_size: 4 送膳, v2_capacity: 4

v2_size: 5 , v2_capacity: 6

v2_size: 6 丑蛤, v2_capacity: 6

v2_size: 7 , v2_capacity: 9

v2_size: 8 撕阎, v2_capacity: 9

v2_size: 9 受裹, v2_capacity: 9

v2_size: 10 , v2_capacity: 13

v2_size: 11 虏束, v2_capacity: 13

v2_size: 12 棉饶, v2_capacity: 13

v2_size: 13 , v2_capacity: 13

v2_size: 14 镇匀, v2_capacity: 19

v2_size: 15 照藻, v2_capacity: 19

v2_size: 16 , v2_capacity: 19

v2_size: 17 汗侵, v2_capacity: 19

v2_size: 18 幸缕, v2_capacity: 19

v2_size: 19 , v2_capacity: 19

v2_size: 20 晰韵, v2_capacity: 28

v2_size: 21 发乔, v2_capacity: 28

當你把特別大的數(shù)據(jù)輸入到一個vector時,這個分配內(nèi)存的操作就會頻繁發(fā)生雪猪,這顯得非常的低效栏尚,比如我想把一個模型文件.obj輸入到vector中,幾十萬甚至上百萬點的輸入就會多次分配內(nèi)存只恨,而如果一開始通過reserve指定分配內(nèi)存大小译仗,就會高效的多抬虽。

總結(jié)

  • size():返回vector中的元素個數(shù)
  • capacity():返回vector能存儲元素的總數(shù)
  • resize()操作:創(chuàng)建指定數(shù)量的的元素并指定vector的存儲空間
  • reserve()操作:指定vector的元素總數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纵菌,隨后出現(xiàn)的幾起案子斥赋,更是在濱河造成了極大的恐慌,老刑警劉巖产艾,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疤剑,死亡現(xiàn)場離奇詭異,居然都是意外死亡闷堡,警方通過查閱死者的電腦和手機隘膘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杠览,“玉大人弯菊,你說我怎么就攤上這事□獍ⅲ” “怎么了管钳?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長软舌。 經(jīng)常有香客問我才漆,道長,這世上最難降的妖魔是什么佛点? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任醇滥,我火速辦了婚禮,結(jié)果婚禮上超营,老公的妹妹穿的比我還像新娘鸳玩。我一直安慰自己,他們只是感情好演闭,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布不跟。 她就那樣靜靜地躺著,像睡著了一般米碰。 火紅的嫁衣襯著肌膚如雪窝革。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天见间,我揣著相機與錄音聊闯,去河邊找鬼。 笑死米诉,一個胖子當著我的面吹牛菱蔬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼拴泌,長吁一口氣:“原來是場噩夢啊……” “哼魏身!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚪腐,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤箭昵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后回季,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體家制,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年泡一,在試婚紗的時候發(fā)現(xiàn)自己被綠了颤殴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鼻忠,死狀恐怖涵但,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帖蔓,我是刑警寧澤矮瘟,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站塑娇,受9級特大地震影響澈侠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钝吮,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一埋涧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奇瘦,春花似錦、人聲如沸劲弦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邑跪。三九已至次坡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間画畅,已是汗流浹背砸琅。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轴踱,地道東北人症脂。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诱篷。 傳聞我的和親對象是個殘疾皇子壶唤,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. vector的特點 內(nèi)存特點: 內(nèi)存空間連續(xù),隨機訪問效率高棕所。插入刪除:插入或者刪除某個元素闸盔,需要將現(xiàn)有元素...
    鄭行_aover閱讀 1,901評論 0 2
  • 標準模板庫由三個部分組成:容器迎吵、迭代器、算法 Q:容器分為哪幾種针贬? A:順序容器击费、關(guān)聯(lián)容器、容器適配器 Q:簡要闡...
    涼拌姨媽好吃閱讀 4,443評論 0 7
  • 這周作業(yè)是和vector有關(guān)的坚踩,就找了找vector相關(guān)的內(nèi)容荡灾。如下: vector是C++標準模板庫中的部分內(nèi)容...
    shenhua8369閱讀 366評論 0 0
  • #1.順序容器概述 #2.容器庫概覽迭代器容器類型成員begin和end成員容器定義和初始化賦值和swap容器大小...
    MrDecoder閱讀 1,220評論 0 1
  • 半年前,離開職場瞬铸,成為一名全職媽媽批幌。雖然不是自己主動的選擇,卻也在這意外的災(zāi)難里獲得了生活的小小饋贈嗓节。 因為是一個...
    毛衣同學閱讀 583評論 2 10