首页 > 解决方案 > 可以从命令行参数中读取 std::array 的维度吗?

问题描述

我有一个 C++ 代码,我决定使用它std::array来代替,std::vector我希望从命令行读取数组的大小。

在实践中,这可以用以下代码段来总结

#include <iostream>
#include <array>
#include <sstream>

int main(int argc, char* argv[]){

  std::size_t my_size;
  {
    std::istringstream is{argv[1]};
    is >> my_size;
  }
 
  std::cout << my_size<<std::endl;
  std::array<int,my_size> a;
  return 0;
}

my_size编译器给出以下错误,这是由于必须在编译时知道的事实。

错误:'my_size' 的值在常量表达式中不可用
14 | std::array<int,my_size> a;

有没有办法让std::array从命令行给出的大小?还是我一定要使用其他容器?作为堆上的动态数组,或者std::vector

标签: c++arraysvectorc++-standard-library

解决方案


特别是类型和数组大小必须在编译时知道,因此答案是:不。

您可以实现一些从运行时值到编译时常量的映射。类似的东西

size_t size;
std::cin >> size;
if (size == 10) {
     std::array<int,10> x;
     // use x
} else if (size == 20) [
     std::array<int,20> y;
     // use y
}

然而,这是非常有限的用途,因为xy是不同的类型。当大小仅在运行时已知时,使用std::vector.


推荐阅读