2010-07-22 18 views
7

Estoy codificando en C++ y necesito un almacenamiento dinámico de datos, como ArrayList en C# o Java.Datos dinámicos en C++

¿Alguien puede ayudarme con eso? No estoy seguro de qué usar. Gracias!

+8

[tiempo para conseguir un buen libro.] (Http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) :) – GManNickG

Respuesta

8

Está buscando std::vector. Puede leer here al respecto (desplácese hacia abajo en esa página para ver una descripción de sus funciones).

Los vectores tienen búsqueda constante. La inserción/eliminación es rápida al final de un vector, pero (como el enlace que publiqué explica con más detalle) es más lento de lo contrario. Además, los vectores tienen que cambiar de tamaño a medida que almacena datos adicionales en ellos, por lo que vale la pena mirar en reserve (esto es como ArrayLists 'ensureCapacity). Tenga en cuenta que este cambio de tamaño es automático: reserve solo existe por motivos de rendimiento.

1

o std::list para el caso ...

+1

Si desea una alternativa, 'std :: deque' es probablemente la segunda opción para el almacenamiento dinámico simple. Una lista vinculada es el contenedor de elección en solo unas pocas situaciones, en su mayoría bastante inusuales. Ver: http://stackoverflow.com/questions/2429217/under-what-circumstances-are-linked-lists-useful –

0

Si usted es realmente sólo un principiante, usted debe comenzar con lo básico: arrays.

Una vez que comprenda lo que está sucediendo debajo, debe pasar al STL y los contenedores (como vector), como todos los demás están sugiriendo.

+2

Yo diría todo lo contrario: comenzar con el vector. En algún punto del futuro (probablemente lejano), puede que tenga una razón para usar una matriz, pero para los principiantes (y para la mayoría de los programadores avanzados, para el caso) es mejor evitarlos. –

+2

Creo que esto definitivamente es tema de debate. Para comprender las matrices de forma dinámica (y utilizarlas de forma segura), es necesario comprender la gestión manual de la memoria en un nivel muy práctico (punteros, nuevas, eliminar, referenciar, desreferenciar, etc.).Uno puede explicar cómo funcionan los vectores con conceptos más generales/simples, que dan una buena introducción a la gestión de la memoria. Supongo que es por esta razón que varios de los textos altamente recomendados de C++ (Accelerated C++ y Stroustrup's Programming: Principles and Practice) introducen std :: vector mucho antes de las matrices. – MarkD

+0

@Jerry, MarkD: Estoy corregido entonces. En mis clases de Comp Sci, nos enseñaron arreglos, luego punteros, luego plantillas, y luego * apenas * tocaron STL. El pensamiento fue que una vez que entendiste los fundamentos, podrías entender mejor cómo usar y trabajar la biblioteca de nivel superior. Sin embargo, en retrospectiva, realmente no estoy de acuerdo con mucho de lo que nos enseñaron: mi profesor * insistió * en que puse un método 'ostream & display (ostream & out) const' en nuestra clase 'Vector' de matriz estática, así como un 'amigo ostream & operador << (ostream & out, const Type & x) {return x.display (out); } ' –

0

Bien, hay 2 opciones que aparecen de inmediato.

El primero es usar std :: vector. Un vector funciona básicamente igual que una matriz (excepto la declaración y la sintaxis de llamada) en la superficie. Las 2 cosas que quiere saber sobre vectores es que puede llamar a una función que aumentará el tamaño de su vector (agregue índices al final). La otra cosa es que para crear un vector de 2 dimensiones necesitarías declarar un vector de vectores. Esto también le permite tener más de 2 dimensiones.

La otra cosa que puede usar es std :: list. Esta es solo una lista vinculada en la que puede insertar y eliminar elementos.

Cuestiones relacionadas