创建一个动态std :: array of std :: array

时间:2018-12-10 16:18:48

标签: c++ arrays

我的任务要求我创建一个数组数组来存储一些数据,其中行数是固定的,列将在运行时确定。

如果我使用的是简单的int数组,那么这将是一个简单的任务,但是由于必须使用std :: array,我迷路了。

到目前为止我的尝试

#include<iostream>
#include<array>
using std::array;
int main(){
  array<array<int,1>*,3> x;
  for(size_t i=0;i<3;i++)
      {
        x[i][0]=array<int,3>;
      }
}

这会导致错误

  

array1.cpp:12:29:错误:对于函数样式强制转换或类型,应为'('         施工           x [i] [0] = array;                   ~~~~~~~~~~~~ ^^产生1个错误。

使用clang ++时

我已阅读到std :: array等同于普通数组, 我知道我可以使用向量,但是因为我从一开始就知道有多少行,所以我觉得使用向量是浪费,而与传统数组相比,我更喜欢std :: array的附加功能。我该如何实现。

2 个答案:

答案 0 :(得分:5)

std::array<std::vector<int>,3>是您想要的类型。

std::vector是一个动态大小的数组。

int main(){
  std::array<std::vector<int>,3> x;
  for(std::size_t i=0;i<3;i++)
  {
    x[i]=std::vector<int>(22);
  }
}

这将创建一个3个“主要”元素数组,其大小为22个“较小”。

请注意,column-major和row-major(第一和第二)是惯例问题。因此std::vector<std::array<3,int>>是对需求的另一种等效解释。

如果您被禁止使用std::vector,则必须找出一种替代解决方案,可能会自行解决。我建议不要使用unique_ptr<int[]>(或更糟糕的是原始指针),因为它们不存储元素的大小。

std::array< std::array<在任何一个维度上都不是动态的。 std::array是固定大小。

答案 1 :(得分:1)

  

我的任务要求我创建一个数组数组来存储一些数据,其中行数是固定的,列数将在运行时确定。

听起来您的任务需要使用矩阵类。像boost::numeric::ublas::matrix

使用矩阵类的好处是,在内部它使用一个动态数组来最大程度地减少存储开销。

如果您将此编码为练习,请创建自己的矩阵类。否则,请使用现有的。