[英]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.