2010-07-31 128 views
3

我想做一個5維矢量,我似乎無法得到它的工作。 我知道如果我需要寫一個3維向量,我可以通過以下方式寫: vector< vector< vector<string> > > block(27, vector< vector<string> > (27, vector<string>(27)));C++ 5維矢量?

然後我把它叫做:block[x][y][z] = 「hello」;

我以下列方式寫了5維向量,它給我錯誤。 vector< vector< vector< vector< vector<string> > > > > block(27, vector< vector< vector< vector<string> > > >(27, vector< vector< vector<string> > >(27, vector< vector<string> >(27, vector<string>(27)))));

你能告訴我如何以正確的方式寫5維矢量嗎? 非常感謝。

+0

它是'C++'嗎?最後一個矢量必須是'std :: vector ',或者'std :: vector '或者類似的東西。編譯器給了什麼錯誤? – 2010-07-31 05:23:55

+0

您是否考慮過使用圖書館?如何Boost.MultiArray? – user401947 2010-07-31 09:10:01

回答

3

但是,你應該停下來想一想,如果字典會更好地工作。如果數據稀少,您將節省大量的內存。 使用5個維度創建一個密鑰,並只創建您需要的成員。

+0

謝謝,地圖做得很好,沒有太多的記憶。和散文使用。 – 2010-07-31 07:22:05

6

5維數組中的最終矢量沒有它是數組的類型。

vector< vector< vector< vector<vector> > > > 
            ^^ 
            Here. What is the base vector a vector off? 

爲了讓事情容易閱讀一對夫婦的類型定義的將是不錯:

typedef std::vector<std::string>  Dim1; 
typedef std::vector<Dim1>   Dim2; 
typedef std::vector<Dim2>   Dim3; 
typedef std::vector<Dim3>   Dim4; 
typedef std::vector<Dim4>   Dim5; 

Dim5 block(27, Dim4(27, Dim3(27, Dim2(27, Dim1(27))))); 
+0

我想讓5D數組保持以下格式的值。 block [1] [1] [1] [1] [1] =「hello」; 我的3維數組工作得很好,就像我上面寫的那樣。你能否按照它的方式重寫上面的5維數組?謝謝。 – 2010-07-31 05:35:34

+0

好的,非常感謝。之前沒有看到您的完整信息。這有助於很多。謝謝。 – 2010-07-31 05:36:41

+0

哎呀,我仍然有同樣的問題。你寫的和我的一樣。它首先給了我很多警告。然後程序運行,它不會通過你聲明矢量的點。內存不斷積累和崩潰。它給出了漫長的警告。 警告C4503: '的std ::矢量<_Ty> ::矢量':修飾名長度超過,名稱被截斷 1>使用 1> [ 1> _Ty = DIM4 1>] 1>:警告C4503:' std :: vector <_Ty> :: _ Construct_n':裝飾名稱長度超過,名稱被截斷 1>與 1> [ 1> _Ty = Dim4 1>] 。 。 。 。 – 2010-07-31 05:46:16

6

考慮對高維數組使用Boost多維數組庫。

http://www.boost.org/doc/libs/1_43_0/libs/multi_array/doc/user.html

「升壓的MultiArray是表達比現有的替代品(特別是在std ::矢量> N維陣列的製劑)的N維陣列的更有效的和方便的方法。將陣列庫提供可以使用本地C++數組的熟悉語法來訪問,還可以使用其他功能(如調整大小,重新調整形狀和創建視圖)(請參閱下文)。