C++ 当尝试从非常量大小初始化std::数组时,如何修复编译器错误

C++ 当尝试从非常量大小初始化std::数组时,如何修复编译器错误,c++,templates,stdarray,C++,Templates,Stdarray,我知道我可以使用向量,但我不需要向量的额外特性,所以我想使用std::array。我的问题是,我从用户那里得到了数组的大小——从stdin。然后我知道大小,并从那里初始化数组 我尝试了以下代码,但得到了如图所示的编译器错误。我还用fsize尝试了constexpr 如何编辑代码,从编译时未知的大小创建std::数组 int main() { int size; cin >> size; const int fsize = size; // below line c

我知道我可以使用向量,但我不需要向量的额外特性,所以我想使用std::array。我的问题是,我从用户那里得到了数组的大小——从stdin。然后我知道大小,并从那里初始化数组

我尝试了以下代码,但得到了如图所示的编译器错误。我还用fsize尝试了constexpr

如何编辑代码,从编译时未知的大小创建std::数组

int main() {

  int size;
  cin >> size;

  const int fsize = size;
  // below line compile error
  std::array<int, fsize> items;
}
如何编辑代码,从编译时未知的大小创建std::数组

int main() {

  int size;
  cin >> size;

  const int fsize = size;
  // below line compile error
  std::array<int, fsize> items;
}
你不能
std::array
是一个固定大小的数组,它的大小必须是编译时已知的常量

要创建在运行时才知道大小的动态数组,必须改用
new[]

int *items = new int[fsize];
...
delete[] items;
std::unique_ptr<int[]> items(new int[fsize]);
最好使用
std::vector
,它可以为您处理:

std::vector<int> items(fsize);

auto items=std::使_唯一(fsize);

你不能。模板非类型参数必须是编译时常量。请改用
std::vector
std::vector项(fsize)必须在编译时确定
std::array
的大小。如果您需要动态数组,
std::vector
更可取。一般来说,模板生成的代码与程序的其余部分一起编译。如果编译器没有它需要的信息,它会告诉你。
auto items = std::make_unique<int[]>(fsize);