【问题标题】:Declaring size of 3D vector声明 3D 矢量的大小
【发布时间】:2016-10-18 00:17:17
【问题描述】:

我需要有一个 myClass 对象向量的二维数组,以便我可以使用数组中的坐标访问其中一个向量(如二维平面)。但是大小必须在运行时确定。正因为如此,我决定把它做成一个这样声明的 3D 矢量

   vector<vector<vector <myClass> > > vex;

这样,我可以在运行时声明大小。但是,我无法弄清楚声明前两个外部向量大小的语法。使用单个向量,它的声明如下:

vex(size);

但是对于像我这样的多向量如何做到这一点?这样我就可以使用

访问 myClass 向量之一
vex[x][y];

【问题讨论】:

  • 请注意,没有“两个外部向量”。有一个外层向量,里面包含一堆向量(不只是一个向量),里面包含更多的向量。
  • 如果这个问题是为了探索C++的知识库,那很好。但如果这是为了 PROD 使用,那么你必须重新考虑你的类设计。

标签: c++ arrays vector


【解决方案1】:

您可以使用typedef 来简化事情:

#include <vector>
typedef std::vector<MyClass> MyClassV;
typedef std::vector<MyClassV> MyClass2V;
typedef std::vector<MyClass2V> MyClass3V;

//...

然后像这样初始化:

MyClass3V vect(num1, MyClass2V(num2, MyClassV(num3)));

这会创建一个MyClassnum1 x num2 x num3 向量。

如果你想要一个完全空的向量,那么只需

MyClass3V vect;

这样做。然后你可以resize()每个维度来满足你的需要:

vect.resize(4, MyVect2V(2)); // creates a 4 x 2 x 0 vector.

【讨论】:

    【解决方案2】:

    如果您需要用默认构造的myClass 实例填充向量,您可以这样做:

    vector<vector<vector <myClass> > > vex(size, vector<vector<myClass>>(size, vector<myClass>(size)));
    

    【讨论】:

    • 有没有办法在不填充 myClass 实例的情况下做到这一点?所以 myClass 向量最初是空的?
    • @Bob map of maps,我猜。
    • @Bob 如果您想始终使用 vex[x][y] 访问它们,请不要。
    • 好吧,我知道您最初无法访问它们。我的意思是这样我以后可以用 vex[x][y].push_back(....)
    • @Bob 省略最后一个size。不知道你为什么想要那个,但这会给你一个由空向量组成的向量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多