繁体   English   中英

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

[英]create a Dynamic std::array of std::array

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

如果我使用的是简单的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的功能。 我如何实现这一点。

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是固定大小的。

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

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

使用矩阵类的好处是,在内部它使用一个动态数组来最小化存储开销。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM