数组动态初始化

时间:2013-07-23 07:59:27

标签: c++ arrays

有没有办法动态初始化数组大小而不使用数组指针?

除对象数组外的任何数据类型数组。

使用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];
}

3 个答案:

答案 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);