2013-07-23 6 views
-1

Есть ли способ для динамически инициализировать размер массива без использования указателя на массив?Array Динамическая инициализация

Любой массив данных, за исключением массива объектов.

с помощью 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]; 
} 
+9

Вы знакомы с 'std :: vector'? –

+0

Вы пытаетесь выделить неинициализированную память для объектов? например, std :: vector :: reserve()? – Pete

+4

Будьте осторожны с вашей формулировкой и написанием. Трудно читать. – hivert

ответ

0

Стандарт C++ только позволит массивы должны быть размером с постоянным выражением (Тем не менее, некоторые компилятора могут предложить его в качестве расширения нестандартного языка)

Вы можете использовать станд :: вектор вместо: -

std::vector<int> array(arr_size); 

Или вы можете динамически выделить память вручную: -

int *const array = new int[arr_size]; 

...

delete [] array; // Remember to delete when you're done 

P.S: Y вы не хотите использовать указатели? С ними довольно легко.

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); 
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 [константа-выражение] атрибут-спецификатор-сл

Если константа-выражение присутствует, то он должен быть составной постоянным выражением и его значение должно больше нуля.

Смежные вопросы