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

2024-04-17

我有一些与数组相关的问题。我研究过数组大小在声明时必须是常量/编译器必须知道它的值。但是使用 GNU GCC 编译器(C++11 标准过滤器),当动态声明所述数组时(使用new)

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

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

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

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

(PS:嗨,我是新来的,而且还是 C++ 新手)


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

是的,这是完全有效的。请注意,您需要显式删除由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 VLAs).

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

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

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

是的当然:

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

但再一次use 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); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 new 运算符创建用户输入大小的数组 的相关文章

随机推荐