Re: [STL ] 2D 記憶體初始的問題

看板C_and_CPP (C/C++)作者 (cppOrz)時間18年前 (2006/04/10 07:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ 引述《Renell (開卷有益)》之銘言: : ※ 引述《Renell (開卷有益)》之銘言: : : 我使用兩種矩陣宣告的方法 : : 發現使用STL的vector記憶體宣告的很慢>< : : 有什麼特別的方法可以改善的嗎?? : : int Row,Col; Row = 5000; Col = 8000; : : // Case 1 : : int** a1; : : a1 = new int*[Row]; : : for(int i=0;i<Row;i++){ a1[i] = new int[Col]; } : : // case 2 : : vector< vector<int> > a2(Row,vector<int>(Col)); : :-- : :◆ From: 220.139.128.121 : :推 PwiPwiWorm:case2寫法有問題,會有許多不必要的copy,請參考版上寫法 04/07 11:56 : :推 babyghost:建議case2 使用vector< vector<int>* > 04/07 13:03 : 可否進一步指示怎麼使用vector< vector<int>* >宣告呢? : 使用這個方法,記憶體會連續嘛?? 有什麼情況會需要用到容量 40 M 的矩陣?重新考慮一下你的設計, 說不定用個 multimap 之類的就可以解決問題。 vector< vector<int> > 會慢是因為產生太多暫時物件,而且它還對 每個 Row 的每個 Col 作了兩次初始化(一次把暫時物件設為 0,一 次把暫時物件的 0 複制過去)的動作。 不建議用 vector< vector<int>* > 的寫法,用 vector 主要的兩個 優點是延伸性和自動內存管理。但此案例中,第一個好處你不需要, 第二個好處你享受不到(還是得自己配置自己釋放內存),所以不如 直接手動配置。 vector 比手動配置慢也只有在初始的時候。如果不能忍受這點的話, 就自己手動配置算了。可以參考精華區中,動態 2D Array 的使用方 法,其中初始化最快的應該是以一維陣列來模擬(第四種),因為內 存是連續的,至於 boost::multi_array (最後一種)我沒測過效能, 不過你可以試試看,說不定它初始也夠快。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.214.120
文章代碼(AID): #14EP_99T (C_and_CPP)
文章代碼(AID): #14EP_99T (C_and_CPP)