创建一个std :: array的Dynamic std :: array

Nit*_*hah -1 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>;
      }
}
Run Code Online (Sandbox Code Playgroud)

这导致了错误

array1.cpp:12:29:错误:预期'('为函数式转换或类型构造x [i] [0] =数组; ~~~~~~~~~~~~ ^ 1生成错误.

当使用clang ++时

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

Yak*_*ont 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个22"次要"大小的3"主要"元素数组.

请注意,column-major和row-major(第一个,第二个)是常规问题.所以std::vector<std::array<3,int>>是要求另一个同样有效解释.

如果你被禁止使用std::vector,你将不得不找出一个替代解决方案,可能会自己推出.我建议不要unique_ptr<int[]>(或更糟的是,原始指针),因为它们不存储元素的大小.

任何一个std::array< std::array<方面都不能动态. std::array是固定的大小.