有没有办法动态初始化数组大小而不使用数组指针?
除对象数组外的任何数据类型数组。
使用const
关键字实际上并不起作用,因为必须通过代码而不是用户/客户端将其初始化为某个值。
代码:
void input() {
int size;
cout<<"Enter the value of Array size\t";
cin>>size;
float *ad = new float[size];
float *inad = new float[size];
float *e = new float[size];
}
答案 0 :(得分:2)
执行此操作的最佳方法是std::vector
:
// For an array of int
std::vector<int> array( size );
您可以动态添加元素:
array.push_back( 1 ); // 1 is an example
自定义对象也是如此:
class MyObject {};
std::vector<MyObject> array( number_of_object );
如果您需要一些文档:http://www.cplusplus.com/reference/vector/vector/
正如标准§8.3.4中所述,数组只能用常量表达式调整大小:
[...]
数组声明的格式为: D1 [constant-expression] attribute-specifier-seq
如果常量表达式存在,它应该是一个整数常量表达式,其值应大于零。
答案 1 :(得分:0)
C ++标准只允许使用常量表达式调整数组(但是,某些编译器可能会将其作为非标准语言扩展提供)
您可以使用std :: vector代替: -
std::vector<int> array(arr_size);
或者您可以手动动态分配内存: -
int *const array = new int[arr_size];
...
delete [] array; // Remember to delete when you're done
P.S:你不想使用指针吗?它们相当容易。
答案 2 :(得分:0)
这个问题并不是很清楚,但我认为你要求的是,没有指针就可以创建动态容器。鉴于标签,您希望使用C ++。
因此
class Foo {
// Default copy and move constructor created by compiler to allow fast copy by value
};
std::vector<Foo> my_dynamic_array;
如果你想预留一些空间
my_dynamic_array.reserve(50);
如果你想按值添加项目,没有指针
Foo aFoo;
my_dynamic_array.push_back(aFoo);