2010-07-31 90 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++数组的熟悉语法来访问,还可以使用其他功能(如调整大小,重新调整形状和创建视图)(请参阅下文)。