2011-05-28 97 views
3

有什麼辦法可以製作多維數組的向量?即時嘗試使用2維整數數組作爲其元素,但vector<int[4][4]>無法正常工作。做這件事的正確方法是什麼?向量的多維數組

+4

你不能做一個包含'int [4] [4]'的類嗎?然後,你的類的一個'std :: vector' ... – vrince 2011-05-28 01:04:15

+0

如果你真正想要的是一個矩陣向量,或者一個三維向量,我可以推薦Armadillo:http://arma.sf.net – drizzd 2011-05-28 10:08:39

回答

0

這不能用內建的多維數組來完成。您可以使用Boost multi-dimensional arrays

這個link有一個很好的解釋爲什麼它不可行。基本上,int [4] [4]類型是不可賦值的。

3

根本不能擁有數組的向量。標準容器元素類型必須爲可複製,且數組不可複製。

但是,你可以有載體的載體,如:

std::vector<std::vector<int> > 

玩這個。

或者堅持使用數組:

std::vector<boost::array<int, N> > 

或者,如果你有C++ 0X:

std::vector<std::array<int, N> > 

{boost,std}::array是圍繞自動存儲持續時間陣列的對象包裝,所以它的非常接近你最初的嘗試。

+1

真的提升或C++ 0x來實現int [4] [4]?一個很大的工具來實現一些基本的東西... – vrince 2011-05-28 01:48:53

+0

@vrince:寫你自己的'struct T {int ar [4] [4]; };'如果它困擾你。而Boost或C++ 0x中的相關頭文件是「大工具」,是一個完整的神話;他們其實很輕。 (它本身有點令人遺憾,原生數組並不是第一個可以複製的......這就怪C) – 2011-05-28 01:53:17

+0

「大工具」並不是你的正確表達方式,我試圖用法語表達文學說「用錘子殺死蒼蠅」......顯然我失敗了:)。我只是害怕needhelps會錯過使用這些庫的'copyable'概念。 – vrince 2011-05-28 02:56:49

0

由於@vrince在評論所說,你可以有一個類/結構封裝int[4][4]

struct My2DArray { 
    int a[4][4]; 
}; 

而對於上述聲明vector

vector<My2DArray> obj; 

爲了方便,你可以定義各種operator小號和public方法(比如複製構造函數,賦值運算符等)來處理它。