Как создать динамический массив целых чисел на C ++ с помощью newключевого слова?
Как создать динамический массив целых чисел на C ++ с помощью newключевого слова?
Ответы:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
Не забывайте о deleteкаждом массиве, который вы выделяете new.
delete, ваш код неверен.
Начиная с C ++ 11, существует безопасная альтернатива new[]и, в delete[]отличие от std::vector:
std::unique_ptr<int[]> array(new int[size]);
В C ++ 14:
auto array = std::make_unique<int[]>(size);
Оба вышеизложенного полагаются на один и тот же файл заголовка, #include <memory>
Возможно, вы захотите рассмотреть возможность использования стандартной библиотеки шаблонов. Он прост и удобен в использовании, к тому же вам не нужно беспокоиться о выделении памяти.
http://www.cplusplus.com/reference/stl/vector/vector/
int size = 5; // declare the size of the vector
vector<int> myvector(size, 0); // create a vector to hold "size" int's
// all initialized to zero
myvector[0] = 1234; // assign values like a c++ array
std::vectorс соответствующим конструктором работает очень хорошо, и его следует указать в качестве альтернативы. Иногда люди задают вопрос плохо, и это может считаться одним из таких случаев - он очень краткий и не дает никаких оснований для предпочтения new.
new[]вместо std::vector.
deleteничего делать вручную. Кроме того, std::vectorэто динамический массив, который ничего не делает со связанным списком. Это просто обертка вокруг куска памяти.
newи deleteдля реализации оберток. Дело в том, что вы не управляете ресурсом и не используете его, вы делаете то или другое.
new[]можно заменить на std::vector. И поскольку std::vectorправильно отделяет управление ресурсами от использования ресурсов (SBRM), мы должны это сделать.
int* array = new int[size];
std::vector::data()функция-член вернет базовый необработанный массив, когда это необходимо.
operator&вместо того, data()чтобы получать указатель из вектора, но верно, что вектор обеспечивает гарантию непрерывности, необходимую для совместимости с функциями, ожидающими массивы.
Если речь идет о динамическом массиве, вы можете захотеть не просто создать массив с переменным размером, но и изменить его размер во время выполнения. Вот пример memcpy, вы также можете использовать memcpy_sили std::copy. В зависимости от компилятора <memory.h>или <string.h>может потребоваться. При использовании этой функции вы выделяете новую область памяти, копируете в нее значения исходных областей памяти, а затем освобождаете их.
// create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];
// now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];
/*
somehow set values to given arrays
*/
// add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
Вы можете использовать константу 4 вместо sizeof(int).
динамически выделять память, используя new:
int* array = new int[SIZE];
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
float arr[2095879];
long k,i;
char ch[100];
k=0;
do{
cin>>ch;
arr[k]=atof(ch);
k++;
}while(ch[0]=='0');
cout<<"Array output"<<endl;
for(i=0;i<k;i++){
cout<<arr[i]<<endl;
}
return 0;
}
Приведенный выше код работает, максимальный размер массива с плавающей запятой или int, который можно было определить, был размером 2095879, а условием выхода было бы ненулевое начальное число ввода
std::vector<int>. И книгу .