【问题标题】:Vector of multidimensional arrays多维数组向量
【发布时间】:2011-09-03 18:41:48
【问题描述】:

有没有办法制作多维数组的向量?我试图制作一个以二维整数数组作为元素的向量,但vector<int[4][4]> 不起作用。正确的做法是什么?

【问题讨论】:

  • 你不能做一个包含 int[4][4] 的课程吗?然后是您班级的std::vector ...
  • 如果你真正想要的是矩阵向量,或者3维向量,我可以推荐犰狳:arma.sf.net

标签: c++ vector multidimensional-array


【解决方案1】:

正如@vrince 在评论中建议的那样,您可以有一个封装int[4][4] 的类/结构:

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

并在上面声明vector

vector<My2DArray> obj;

为方便起见,您可以定义各种operators 和public 方法(比如复制构造函数、赋值运算符等)来处理它。

【讨论】:

    【解决方案2】:

    你根本不能有数组的向量。标准容器元素类型必须可复制,数组不可复制。

    但是,您可以拥有一个向量的向量,例如:

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

    玩这个。

    或者,坚持使用数组:

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

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

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

    {boost,std}::array 是一个围绕自动存储持续时间数组的对象包装器,因此它与您最初尝试的非常接近。

    【讨论】:

    • 真的用 boost 或 c++0x 来实现 int[4][4] 吗?一种实现非常基本的东西的大工具......
    • @vrince:如果它困扰你,写你自己的struct T { int ar[4][4]; };。并且 Boost 或 C++0x 中的相关标头是“大工具”是一个完整的神话;它们实际上非常轻巧。 (这有点遗憾的是,原生数组一开始就不可复制......这要怪C。)
    • “大工具”不是您正确的表达方式,我试图使用一种法语表达方式,文学上说“用锤子杀死苍蝇”......显然我失败了:)。我只是担心需要帮助会错过使用这些库的copyable 概念。
    【解决方案3】:

    这不能用内置的多维数组来完成。

    但你可以使用Boost multi-dimensional arrays

    这个link 很好地解释了为什么它不可行。基本上,类型 int[4][4] 是不可分配的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2020-01-11
      • 2011-04-29
      相关资源
      最近更新 更多