¿Cómo crear una matriz dinámica de enteros en C ++ usando la newpalabra clave?
¿Cómo crear una matriz dinámica de enteros en C ++ usando la newpalabra clave?
Respuestas:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
No olvide deletecada matriz con la que asigne new.
delete, su código es incorrecto.
Desde C ++ 11, existe una alternativa segura new[]y delete[]que tiene cero gastos generales a diferencia de std::vector:
std::unique_ptr<int[]> array(new int[size]);
En C ++ 14:
auto array = std::make_unique<int[]>(size);
Ambos de los anteriores se basan en el mismo archivo de encabezado, #include <memory>
Es posible que desee considerar el uso de la biblioteca de plantillas estándar. Es simple y fácil de usar, además de que no tiene que preocuparse por las asignaciones de memoria.
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::vectorcon el constructor apropiado funciona realmente bien y debe señalarse como una alternativa. A veces, las personas hacen la pregunta mal, y esto podría contar como uno de esos casos: es muy breve y no da ninguna razón para preferir new.
new[]lugar de std::vector.
deletenada manualmente. Además, std::vectores una matriz dinámica y no hace nada con una lista vinculada. Es solo un envoltorio alrededor de un trozo de memoria.
newy deletepara implementar envoltorios. El punto es que no administras un recurso y lo usas, haces lo uno o lo otro.
int* array = new int[size];
std::vector::data()función miembro devolverá la matriz sin procesar subyacente cuando sea necesario.
operator&lugar de data()obtener un puntero de un vector, pero es cierto que un vector proporciona la garantía de contigüidad necesaria para la compatibilidad con funciones que esperan arreglos.
Tan pronto como la pregunta sea sobre la matriz dinámica, es posible que desee no solo crear una matriz con tamaño variable, sino también cambiar su tamaño durante el tiempo de ejecución. Aquí hay un ejemplo con memcpy, puede usar memcpy_so std::copytambién. Dependiendo del compilador, <memory.h>o <string.h>puede ser necesario. Al utilizar estas funciones, asigna una nueva región de memoria, copia los valores de las regiones de memoria originales en ella y luego los libera.
// 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;
Puede utilizar la constante 4 en lugar de sizeof(int).
asignar dinámicamente algo de memoria usando 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;
}
El código anterior funciona, el tamaño máximo de matriz flotante o int que se podría definir era con el tamaño 2095879, y la condición de salida sería un número de entrada inicial distinto de cero
std::vector<int>. Y un libro .