作者cathrade (hey~)
看板C_and_CPP
標題[問題] 想請問關於c++ vector的push_back問題
時間Thu May 28 14:18:47 2009
想請問版上的高手 我在使用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
1F:→ akasan:你需要的是reserve 而不是resize 05/28 14:25
2F:→ akasan:而且預留空間不影響search時間... 05/28 14:27
3F:→ cathrade:謝謝回答:) 05/28 14:46
4F:推 chrisdar:reserve() 效能不彰 05/28 14:59
5F:→ cathrade:請問樓上 所謂效能不彰是指? 05/28 14:59
6F:→ chrisdar:空間浪費頂多2倍而已 要收回空間可用 a.swap(a); 05/28 15:00
7F:→ cathrade:我是怕在收回前就爆掉了XD 05/28 15:01
8F:→ chrisdar:每次空間增長都是兩倍 10次1K個 20次1M個 時間感覺不出來 05/28 15:02
9F:→ chrisdar:使用 reserve() 一次配置 與 20次配置 都是1M個 差不多 05/28 15:03
10F:→ cathrade:所以我就不用改方法囉? 樓上謝謝你:) 05/28 15:06
11F:推 TroyLee:空間增長不是他會先新產生一個空間再拷貝過去.. 05/29 19:48
12F:→ TroyLee:再Free原本空間, 所以中間有一段時間會比原本多吧 ? 05/29 19:49