我有一類稱爲網格聲明這樣的載體的載體:選擇大小
typedef vector<int> row;
typedef vector<row> myMatrix;
myMatrix sudoku_;
的構造是這樣的:
grid::grid() : sudoku_(9,9)
{
}
正如你所看到的,構造函數將它初始化爲9x9網格。我怎樣才能使它工作,以便用戶被要求輸入一個數字,比如n,並且網格被初始化爲n x n?
我有一類稱爲網格聲明這樣的載體的載體:選擇大小
typedef vector<int> row;
typedef vector<row> myMatrix;
myMatrix sudoku_;
的構造是這樣的:
grid::grid() : sudoku_(9,9)
{
}
正如你所看到的,構造函數將它初始化爲9x9網格。我怎樣才能使它工作,以便用戶被要求輸入一個數字,比如n,並且網格被初始化爲n x n?
vector
有一個構造函數,可以讓你把它與給定值的副本初始化到一定大小:
grid::grid(size_t w, size_t h) : sudoku_(w, row(h)) {}
如果可以,不要用向量。 用這個代替http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/user.html
謝謝,但不幸的是,我們需要使用矢量。它的功課。 – xbonez 2010-05-09 18:29:08
@gf對這個問題有絕對正確的答案,但我會質疑矢量在這裏的使用(對我來說很少見)。在數獨網格的情況下,結構是固定的大小,所以你不會因爲擁有簡單的動態分配而獲勝。通過使用9個矢量的矢量,您有10個填充矢量對象。其中每一個都至少有一個動態分配,所以有十個調用新的。最重要的是,關於std :: vector的實現,我最熟悉的對象是12個字節(3個32位指針),加上堆分配開銷。所有這些來處理一個可以用100字節以內表示的結構是過度的。
但是這會將其初始化爲9x9再次...我希望它是n x n其中n由用戶輸入 – xbonez 2010-05-09 18:25:03
@xbonez:然後讓構造函數獲取參數 - 請參閱更新。 – 2010-05-09 18:27:49
啊,好的....謝謝。我會試試這個 – xbonez 2010-05-09 18:28:29