gpt4 book ai didi

c++ - 使用 new 运算符创建用户输入大小的数组

转载 作者:可可西里 更新时间:2023-11-01 17:41:30 26 4
gpt4 key购买 nike

我有几个与数组相关的问题。我研究过数组大小在声明时必须保持不变/编译器必须知道它的值。但是使用 GNU GCC 编译器(C++11 标准过滤器),当动态声明所述数组时(使用 new),我能够完美地编译和运行使用变量作为数组大小的程序

int num;
cout << "How big an array? ";
cin >> num;
int *arr = new int [num];

问题 1) 这被认为是标准的吗?我的教授是矛盾的。

问题 2) 如果它标准,在那种情况下,是否可以在创建后扩展数组(或任何数组)的大小?

问题 3) 同样,如果这个表达式是标准的,那么是否可以在函数中使用它 - 例如。使用函数来创建这样的数组? (如果是,怎么做?)

(PS:嗨,我是新来的,也是C++的新手)

最佳答案

Ques1) Is this considered standard? My profs are contradictory.

是的,这是完全正确的。注意需要显式删除arr指向的内存使用运算符 delete[] .使用 std::vector<int> 会好得多它将为您执行内存管理。

您可能会误认为可变长度数组 (VLA),这在 C++ 中是不允许的:

// same num as the one in your example
int arr[num]; // ERROR

这在 C 中有效但在 C++ 中无效(C++14 将包括 VLA,尽管它们与 C VLA 有一些不同)。

Ques2) If it is standard, in that case, is it possible to extend the size of the array (or any array) after creation?

不,您不能扩展它。您可以分配一个更大的数组,复制元素并删除前一个。同样,如果您使用 std::vector<int>,这是自动完成的.

Ques3) Again, if this expression is standard, then is it possible to use it within a function - eg. using a function to create such an array? (if so, how?)

当然可以:

int *allocate(size_t size) {
return new int[size];
}

但再次使用std::vector :

int num;
cout << "How big an array? ";
cin >> num;
std::vector<int> arr(num); // num elements, all of them initialized to 0
// insert 42 at the end. reallocations(if any) are done automatically
arr.push_back(42);

关于c++ - 使用 new 运算符创建用户输入大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com