[問題] 想請問關於c++ vector的push_back問題

看板C_and_CPP (C/C++)作者 (hey~)時間16年前 (2009/05/28 14:18), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
想請問版上的高手 我在使用vector時 使用大量的push_back 但在網路上得知使用太多次的push_back 會自動往後預留不必要的空間 也就是說push_back使用10萬次 實際上佔了13萬多次的空間 因為現在的問題就是這些自動預留的空間讓我的記憶體爆掉 且search的時候還要掃過這些空白的位子浪費了時間 想請問大家有沒有可以解決的辦法? 因為我沒辦法預先知道vector的size 所以也沒辦法使用resize() 而且我測過先resize後再push_back反而增加數量 也就是說如果有一個vector<int> a a.resize(10) 再a.push_back(1) 那麼a.size()會變成11 因為我真的要使用非常多次的push_back 但產生的預留空間站掉太多空間了 麻煩大家幫我解答 謝謝大家!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.204.250

05/28 14:25, , 1F
你需要的是reserve 而不是resize
05/28 14:25, 1F

05/28 14:27, , 2F
而且預留空間不影響search時間...
05/28 14:27, 2F

05/28 14:46, , 3F
謝謝回答:)
05/28 14:46, 3F

05/28 14:59, , 4F
reserve() 效能不彰
05/28 14:59, 4F

05/28 14:59, , 5F
請問樓上 所謂效能不彰是指?
05/28 14:59, 5F

05/28 15:00, , 6F
空間浪費頂多2倍而已 要收回空間可用 a.swap(a);
05/28 15:00, 6F

05/28 15:01, , 7F
我是怕在收回前就爆掉了XD
05/28 15:01, 7F

05/28 15:02, , 8F
每次空間增長都是兩倍 10次1K個 20次1M個 時間感覺不出來
05/28 15:02, 8F

05/28 15:03, , 9F
使用 reserve() 一次配置 與 20次配置 都是1M個 差不多
05/28 15:03, 9F

05/28 15:06, , 10F
所以我就不用改方法囉? 樓上謝謝你:)
05/28 15:06, 10F

05/29 19:48, , 11F
空間增長不是他會先新產生一個空間再拷貝過去..
05/29 19:48, 11F

05/29 19:49, , 12F
再Free原本空間, 所以中間有一段時間會比原本多吧 ?
05/29 19:49, 12F
文章代碼(AID): #1A7Yp8l_ (C_and_CPP)
文章代碼(AID): #1A7Yp8l_ (C_and_CPP)