尝试从非 const 大小初始化 std::array 时如何修复编译器错误
How to fix compiler error when try to initialise a std::array from a non const size
我知道我可以使用向量,但我不需要向量的额外特征,所以想使用 std::array。我遇到的问题是我从用户那里得到数组的大小——从标准输入。然后我知道大小并从那里初始化数组。
我尝试了以下代码,但出现编译错误,如图所示。我还尝试了 constexpr 和 fsize。
如何编辑我的代码以根据编译时未知的大小创建 std::array?
int main() {
int size;
cin >> size;
const int fsize = size;
// below line compile error
std::array<int, fsize> items;
}
编译错误:
error C2971: 'std::array' : template parameter '_Size' : 'fsize' : a local variable cannot be used as a non-type argument
: see declaration of 'std::array'
see declaration of 'fsize'
How can I edit my code to create a std::array from a size not known at compile time?
你不能。 std::array
是一个固定大小的数组,它的大小必须是编译时已知的常量。
要创建一个直到运行时才知道其大小的动态数组,您必须使用 new[]
代替:
int *items = new int[fsize];
...
delete[] items;
您最好使用 std::vector
,它会为您处理:
std::vector<int> items(fsize);
如果不想用std::vector
,可以用std::unique_ptr<int[]>
代替:
std::unique_ptr<int[]> items(new int[fsize]);
或
auto items = std::make_unique<int[]>(fsize);
我知道我可以使用向量,但我不需要向量的额外特征,所以想使用 std::array。我遇到的问题是我从用户那里得到数组的大小——从标准输入。然后我知道大小并从那里初始化数组。
我尝试了以下代码,但出现编译错误,如图所示。我还尝试了 constexpr 和 fsize。
如何编辑我的代码以根据编译时未知的大小创建 std::array?
int main() {
int size;
cin >> size;
const int fsize = size;
// below line compile error
std::array<int, fsize> items;
}
编译错误:
error C2971: 'std::array' : template parameter '_Size' : 'fsize' : a local variable cannot be used as a non-type argument
: see declaration of 'std::array'
see declaration of 'fsize'
How can I edit my code to create a std::array from a size not known at compile time?
你不能。 std::array
是一个固定大小的数组,它的大小必须是编译时已知的常量。
要创建一个直到运行时才知道其大小的动态数组,您必须使用 new[]
代替:
int *items = new int[fsize];
...
delete[] items;
您最好使用 std::vector
,它会为您处理:
std::vector<int> items(fsize);
如果不想用std::vector
,可以用std::unique_ptr<int[]>
代替:
std::unique_ptr<int[]> items(new int[fsize]);
或
auto items = std::make_unique<int[]>(fsize);