看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《pig00090 (嘿嘿嘿)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : DEV C++ : 問題(Question): : vector<vector<int> >x(2,vector<int>(2)); 上面那行, 是定義一個 x 物件, 内含兩個 vector<int>(2) 的複製品, 因為 vector<int>(2) 的兩個元素都採預設值, 剛好全部都是 0 : 這樣可以宣告出一個兩個row且每個row都存兩個integer為0的值 : 但如果我先宣告vector<vector<int> >x; : 之後拿到參數再給他二維的兩個空間跟值嗎? : 例如 : (1) vector<vector<int> >x; : vector<int>v; : x.reserve(2); : x.push_back(v); : x[0].push_back(0); : x[1].push_back(1); : 這樣compiler會過 但是會overflow : (2) vector<vector<int> >x; : vector<int>v; : x.reserve(2); : x.push_back(v); : x.push_back(v);//給兩次就不會有錯 : x[0].push_back(0); : x[1].push_back(1); x.reserve( 2 ) 只是預先保留 2 個大小為 sizeof( vector<int> ) 的記憶體空間, 所以你還是要用 push_back 在這些記憶體空間上建構 出「真正能使用的物件」, 接下來才行用 x[?] 來存取他們. : 我想請問如果要像(2)這樣宣告 : 除了用for loop以外還有更有效率的方法嗎 : 還是乾脆用pointer比較方便? 如果要動態改變 x 的行、列數, 可以使用: vector<vector<int> >( ROW, vector<int>(COLUMN) ) ).swap( x ); (此種用法詳見C++ Coding Standards一書中的第82條款) 另外推文中的方法, 只有增加列數, 每一列的元素還是 0 個需 要自己添加. -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢██ 歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████花英 ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (01/14 03:55)
tomap41017:swap改變行列!第一次看到!!學起來XD 01/15 12:53