我是C ++的新手,这是一个非常基本的问题。
在C ++中,只有两种方法可以创建动态数组(在书中读取,如果我错了,请纠正我)使用new
运算符或{{1}进行内存分配函数取自C.
声明数组malloc()
时,方括号int array[size]
必须有[]
。
但是,在以下代码中,const
是size
变量。
unsigned int
编译g ++时不会抛出任何错误,而且程序运行完美。
问题1:这可能是另一种创建动态数组的方法吗?
问题2:代码是否正确?
问题3:如果#include<iostream>
int main() {
using namespace std;
unsigned int size;
cout<<"Enter size of the array : ";
cin>>size;
int array[size]; // Dynamically Allocating Memory
cout<<"\nEnter the elements of the array\n";
// Reading Elements
for (int i = 0; i < size; i++) {
cout<<" :";
cin>>array[i];
}
// Displaying Elements
cout<<"\nThere are total "<<size<<" elements, as listed below.";
for (int j = 0; j < size; j++) {
cout<<endl<<array[j];
}
return 0;
}
只能包含[]
,为什么代码有效?
答案 0 :(得分:4)
gcc
extension。这在C中已经被允许很长一段时间了,但是直到C ++ 14才进入C ++标准。gcc
或-std=c++98
编译器标记告诉-std=c++11
您不想使用扩展程序。如果在C ++中需要动态大小的数组,更好的方法是使用std::vector<T>
。它为您提供动态分配数组的灵活性,并负责管理为您分配的内存。
答案 1 :(得分:1)
在C ++中,只有两种方法可以创建动态数组(读入 如果我错了,请使用new来分配内存 operator或malloc()函数,取自C。
这取决于动态的含义。
从严格的技术角度来看,在对象生命周期的上下文中,动态表示具有动态存储持续时间的内容。存储持续时间是对象在创建后的生存时间。具有动态存储持续时间的对象将继续存在,直到明确销毁为止。 (请注意,通过使用智能指针(如std::unique_ptr
)
然而,这似乎并不是你在这个问题中真正要求的。你似乎在问:
如果我想为对象创建容器,但我不知道有多大 该容器需要到运行时,
new
和malloc
我的 唯一的选择?
问题的答案是否。事实上,在现代C ++中,new
使用malloc
应该是最后的选择,使用N
应该是最后的手段。
不要尝试创建vector
元素的C样式数组,而是使用std::vector <int> myInts;
for (int i = 0; i < 10; ++i)
myInts.push_back (i);
代替:
delete
这有几个好处:
vector
任何vector
之前,您不必知道将有多少元素放入vector
- 只需继续添加元素,直到您完成operator[]
保证拥有可靠的存储空间,这意味着可以使用{{1}}访问元素,就像C风格的数组一样