我的任务要求我创建一个数组数组来存储一些数据,其中行数是固定的,列是在运行时决定的.
如果我使用的是一个简单的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的附加功能.我该如何实现呢.
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是固定的大小.