我的任务要求我创建一个数组数组来存储一些数据,其中行数是固定的,列将在运行时确定。
如果我使用的是简单的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的附加功能。我该如何实现。
答案 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
。
使用矩阵类的好处是,在内部它使用一个动态数组来最大程度地减少存储开销。
如果您将此编码为练习,请创建自己的矩阵类。否则,请使用现有的。