2010-10-27 52 views
44

Cómo crear una matriz dinámica de enteros en C++ utilizando la palabra clave new?Cómo crear una matriz dinámica de enteros

+6

Utiliza un 'std :: vector '. Y [un libro] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). – GManNickG

+0

¿cómo se asignan y acceden sus datos una vez que se inicializan? –

+0

Echa un vistazo a esta publicación, aquí se detalla para cada tipo de tipo de datos: http://programmingtunes.com/dynamic-array-in-c/ – user2808359

Respuesta

75
int main() 
{ 
    int size; 

    std::cin >> size; 

    int *array = new int[size]; 

    delete [] array; 

    return 0; 
} 

No se olvide de delete cada matriz se puede asignar con new.

+12

No lo haré -1, pero si posiblemente puede olvidarse de 'borrar', su código es incorrecto. – GManNickG

0

asignar dinámicamente algo de memoria usando new:

int* array = new int[SIZE]; 
+0

Its Not working a Obteniendo una sintaxis Error C2061 – Sudantha

+0

Lo sabía int ..... – Anycorn

+4

punto y coma al final? – Dima

4
int* array = new int[size]; 
+0

Correcto, pero es una mala práctica.:/ – GManNickG

+1

Simplemente responde la pregunta. –

+0

@GManNickG ¿Porque el vector puede ser más conveniente o por otras razones? Porque a menudo encuentro funciones de terceros que requieren el uso de matrices en lugar de vectores. –

20

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 
+10

Ok, pero responder la pregunta real también es bueno. –

+3

@Ed, la restricción en la pregunta parece bastante arbitraria. 'std :: vector' con el constructor apropiado funciona muy bien y debe señalarse como una alternativa. A veces la gente hace la pregunta mal, y esto podría contar como uno de esos casos, es muy breve y no da ninguna razón para preferir 'nuevo'. –

+0

@Ed: no hay ninguna razón para usar 'new []' en lugar de 'std :: vector'. – GManNickG

33

Desde C++ 11, hay una alternativa segura a new[] y delete[] que es cero-overhead diferencia std::vector:

std::unique_ptr<int[]> array(new int[size]); 

En C++ 14:

auto array = std::make_unique<int[]>(size); 

Ambas cosas se basan en el mismo hea der file, #include <memory>

3

Tan pronto como la pregunta es acerca de la matriz dinámica, es posible que desee no solo crear la matriz con tamaño variable, sino también cambiar su tamaño durante el tiempo de ejecución. Aquí hay un ejemplo con memcpy, también puede usar memcpy_s o std::copy. Dependiendo del compilador, es posible que se requiera <memory.h> o <string.h>. Al utilizar estas funciones, asigna una nueva región de memoria, copia los valores de las regiones de memoria originales en ella y luego libéralas.

// 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 usar la constante 4 en lugar de sizeof(int).

Cuestiones relacionadas