推 tomap41017:swap改變行列!第一次看到!!學起來XD 01/15 12:53
※ 引述《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)