2011-10-07 91 views
0

對於2D矢量,我知道我可以去:三維矢量構造C++

vector<vector<T>> vec; 
vec = vector<vector<T>> (boardSize, vector<T>(boardSize)); 

但是我怎麼做到這一點的三維矢量?

我試圖

vector<vector<vector<T>>> vec; 
vec = vector<vector<vector<T>>> (boardSize, boardSize, vector<T>(boardSize)); 

,但它不會編譯。有任何想法嗎?

+2

如果只有一個「矢量」,讓它的大小成爲所有維度的乘積是不是更​​容易?然後將它包裝在一個將多個索引轉換爲單個索引的類中?這比你想要做的要容易得多。或者只是使用Boost.MultiArray。 –

+0

@NicolBolas爲什麼不容易使用3D矢量?我一直在使用沒有戲劇性的2D矢量。不爭論只是有興趣,我對此很新。 :) – Sam

+0

因爲沒有「3D矢量」或「2D矢量」這樣的東西。它們只是一個載體,恰好包含另一個載體。這些對象分配的內存不是連續的。另外,您必須手動調整每個子矢量的大小。這只是一個很大的麻煩。 –

回答

5

只是一個猜測:

vec = vector<vector<vector<T>>> (boardSize, vector<vector<T>>(boardSize, vector<T>(boardSize))); 

這意味着,當你宣佈vector<vector<T>>,第二個參數應該是一個vector<T>;當你宣佈vector<vector<vector<T>>>時,第二個參數應該是vector<vector<T>>,而這應該與第一個情況相同。

+0

我想..我想我愛你。 :) – Sam

0

也許最好的事情就是不要這樣做。創建一個提供3D矢量界面的類(使用some changes)並在內部使用單維矢量。