Jak stworzyć dynamiczną tablicę liczb całkowitych w C ++ za pomocą newsłowa kluczowego?
Jak stworzyć dynamiczną tablicę liczb całkowitych w C ++ za pomocą newsłowa kluczowego?
Odpowiedzi:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
Nie zapomnij o deletekażdej przydzielonej tablicy new.
delete, twój kod jest zły.
Od C ++ 11 istnieje bezpieczna alternatywa dla new[]i delete[]która jest zerowym narzutem w przeciwieństwie do std::vector:
std::unique_ptr<int[]> array(new int[size]);
W C ++ 14:
auto array = std::make_unique<int[]>(size);
Oba powyższe opierają się na tym samym pliku nagłówkowym, #include <memory>
Możesz rozważyć użycie biblioteki szablonów standardowych. Jest prosty i łatwy w użyciu, a ponadto nie musisz się martwić o alokacje pamięci.
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::vectorz odpowiednim konstruktorem działa naprawdę dobrze i należy go wskazać jako alternatywę. Czasami ludzie źle zadają pytanie, a to może się liczyć jako jeden z tych przypadków - jest bardzo krótkie i nie daje żadnego uzasadnienia dla preferowania new.
new[]zamiast std::vector.
deleteniczego robić ręcznie, nigdy. Ponadto, std::vectorjest tablicą dynamiczną, a nie robi nic z połączonej listy. To tylko opakowanie wokół kawałka pamięci.
newi deleteimplementujesz otoki. Chodzi o to, że nie zarządzasz zasobem i nie używasz go, robisz jedno lub drugie.
int* array = new int[size];
std::vector::data()funkcja członkowska zwróci podstawową tablicę surową, gdy będzie to potrzebne.
operator&raczej niż data()pobierania wskaźnika z wektora, ale prawdą jest, że wektor zapewnia gwarancję ciągłości potrzebną do zgodności z funkcjami oczekującymi tablic.
Gdy tylko pojawi się pytanie o tablicę dynamiczną, możesz chcieć nie tylko utworzyć tablicę o zmiennej wielkości, ale także zmienić jej rozmiar w czasie wykonywania. Oto przykład z memcpy, możesz również użyć memcpy_slub std::copy. W zależności od kompilatora <memory.h>lub <string.h>może być wymagane. Korzystając z tej funkcji, przydzielasz nowy obszar pamięci, kopiujesz do niego wartości oryginalnych regionów pamięci, a następnie zwalniasz je.
// 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;
Możesz użyć stałej 4 zamiast sizeof(int).
dynamicznie przydziel trochę pamięci za pomocą 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;
}
Powyższy kod działa, maksymalny rozmiar tablicy typu float lub int, który można zdefiniować, to rozmiar 2095879, a warunek wyjścia byłby różny od zera początkowy numer wejściowy
std::vector<int>. I książkę .