2010-05-09 71 views
2

我有一類稱爲網格聲明這樣的載體的載體:選擇大小

typedef vector<int> row; 
typedef vector<row> myMatrix; 

myMatrix sudoku_; 

的構造是這樣的:

grid::grid() : sudoku_(9,9) 
{ 

} 

正如你所看到的,構造函數將它初始化爲9x9網格。我怎樣才能使它工作,以便用戶被要求輸入一個數字,比如n,並且網格被初始化爲n x n?

回答

6

vector有一個構造函數,可以讓你把它與給定值的副本初始化到一定大小:

grid::grid(size_t w, size_t h) : sudoku_(w, row(h)) {} 
+0

但是這會將其初始化爲9x9再次...我希望它是n x n其中n由用戶輸入 – xbonez 2010-05-09 18:25:03

+0

@xbonez:然後讓構造函數獲取參數 - 請參閱更新。 – 2010-05-09 18:27:49

+0

啊,好的....謝謝。我會試試這個 – xbonez 2010-05-09 18:28:29

1

@gf對這個問題有絕對正確的答案,但我會質疑矢量在這裏的使用(對我來說很少見)。在數獨網格的情況下,結構是固定的大小,所以你不會因爲擁有簡單的動態分配而獲勝。通過使用9個矢量的矢量,您有10個填充矢量對象。其中每一個都至少有一個動態分配,所以有十個調用新的。最重要的是,關於std :: vector的實現,我最熟悉的對象是12個字節(3個32位指針),加上堆分配開銷。所有這些來處理一個可以用100字節以內表示的結構是過度的。