[問題] vector<vector>與list<vector>

看板C_and_CPP (C/C++)作者 (文子水交)時間13年前 (2013/03/31 01:12), 編輯推噓1(1017)
留言18則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) LINUX 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 學C++沒學多久 最近要寫一個code 要用類似二維的方式去存值 但因為row的數量不一定 每個row要的element數量也不一定 本來想要用二維動態配置去寫 但考慮到這樣寫在new與delete時會非常的麻煩 問過別人後是建議我用容器包容器的方法去寫 目前想到的方式就是想要用 vector<vector<int>>或者list<vector<int>>兩者擇一去實作 目前唯一可確定的是我的input data最多讓row只會有10000筆資料 但每個row的element數量可能會更多 想請問一下我用這兩種寫法哪種會比較好@@? 另外因為這個code需要去做一些比較特別的sort 因此我需要經過一些演算後去交換row 想請問一下 我想做交換是否可以直接使用涵式裡的swap 即假設 vector<vector<int>> x; x[i].swap(x[j]); 這樣即可(我省略掉了給值的部分) 因為有看過一些書 然後也有爬版過 但還是看的不是很懂 所以想請問一下版上各位專業的大大們 請幫幫我這新手吧 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.65.154

03/31 01:54, , 1F
不如兩種都寫寫看?
03/31 01:54, 1F

03/31 02:55, , 2F
我會建議如果還不怎麼熟悉容器的話 用 vector<vector<int> >
03/31 02:55, 2F

03/31 02:55, , 3F
list 不能做快速隨機存取可能不會是你要的
03/31 02:55, 3F

03/31 02:56, , 4F
如果確定最多一萬列的話可以在外層 reserve(1000)
03/31 02:56, 4F

03/31 02:57, , 5F
呃 我是說 reserve(10000) 總之你懂的
03/31 02:57, 5F

03/31 03:03, , 6F
你所謂的 "二維" 只是希望語法像陣列, 還是真的有需要
03/31 03:03, 6F

03/31 03:04, , 7F
用 integer -> row 這種需求? 另外每一個 element 是
03/31 03:04, 7F

03/31 03:05, , 8F
否也會需要隨機存取? 先想清楚這些敘述好你的問題然後
03/31 03:05, 8F

03/31 03:05, , 9F
選用適當的容器, 而 vector 跟 list 性質不一樣怎麼會
03/31 03:05, 9F

03/31 03:06, , 10F
在不知道適用問題的情形就拿來比較? 建議你的人很有問
03/31 03:06, 10F

03/31 03:07, , 11F
題... 選用了適合的 stl 容器再來就是 memory usage
03/31 03:07, 11F

03/31 03:08, , 12F
的分析, 如果必要說不定還是要自己實作的, 或是用
03/31 03:08, 12F

03/31 03:08, , 13F
std::forward_list<T>, 每一列用 raw pointer 去管理
03/31 03:08, 13F

03/31 03:09, , 14F
記憶體也是有可能, 但是要視你的問題而定. 不是你"想"
03/31 03:09, 14F

03/31 03:09, , 15F
怎麼用code就怎麼寫, 而是你必須那樣寫才寫
03/31 03:09, 15F

03/31 03:12, , 16F
上面會說到 forward_list 是因為說不定你根本不需要
03/31 03:12, 16F

03/31 03:13, , 17F
從尾端尋訪到開頭, 這時候想到 list 就是誤用而且會混
03/31 03:13, 17F

03/31 03:13, , 18F
淆別人
03/31 03:13, 18F
文章代碼(AID): #1HLnqB3C (C_and_CPP)
文章代碼(AID): #1HLnqB3C (C_and_CPP)