Як створити динамічний масив цілих чисел у 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для реалізації обгортки. Справа в тому, що ти не керуєш ресурсом і не використовуєш його, а робиш те чи інше.
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>. І книжка .