2011-06-24 22 views
7

Soy nuevo en C++, así que esta es probablemente una pregunta muy simple, pero no he podido encontrar ningún ejemplo en línea que me haya ayudado.C++ list/vector help

he definido mi propia clase Bubble y necesito crear un vector/list (estoy acostumbrado a C# y Java, así que no estoy seguro de que es correcta) para almacenar de forma dinámica Bubble objetos. Aquí está mi código hasta ahora:

#include "Bubble.h" 
#include <vector> 
#include <list> 

int backgroundImages[10]; 
list<Bubble> bubbles; 
vector<Bubble> bubbles_two; 
Bubble b; 

void AppMain() 
{ 
    loadImages(); 
    ViewAdd(backgroundImages[8], 0,0); 
    b = Bubble(); 
    b.velocity = Vector2D(9,4); 

    //I know this can't be right.. 
    bubbles.add(b); 
    bubbles_two.add(b); 
} 

ni el list ni las obras vector - dice "lista/vector no es una plantilla" en mi lista de errores.

¿Qué debería usar, list o vector? ¿Y cómo lo implemento correctamente?

Respuesta

7

Las funciones vector.add() y list.add() no existen.

#include "Bubble.h" 
#include <vector> 
#include <list> 

int backgroundImages[10]; 
std::list<Bubble> bubbles(); // use the std namespace and instantiate it 
std::vector<Bubble> bubbles_two(); // same here 
Bubble b; 

void AppMain() 
{ 
    loadImages(); 
    ViewAdd(backgroundImages[8], 0,0); 
    b = Bubble(); 
    b.velocity = Vector2D(9,4); 

    //I know this can't be right.. 
    bubbles.push_back(b); // std::list also defines the method push_front 
    bubbles_two.push_back(b); 
} 

casi no hay diferencias obvias entre el vector y la lista, pero funcionalmente, no lo son.

En comparación con la otra base contenedores de secuencias estándar (deques y listas), los vectores son generalmente los más eficiente en el tiempo para acceder a elementos y para añadir o eliminar elementos desde el final de la secuencia. Para operaciones que impliquen introducir o eliminación de elementos en posiciones distintas que el extremo, realizan peor que deques y listas, y tienen menos iteradores y referencias que las listas coherentes.

En comparación con otros base estándar contenedores de secuencias (vectores y deques), listas realizan generalmente mejor en la inserción, extracción y elementos en movimiento en cualquier posición dentro de el recipiente, y por lo tanto también en algoritmos que hacen uso intensivo de estos, como los algoritmos de clasificación.

+2

"casi sin diferencias obvias"? ¿Qué tal el acceso aleatorio con []/:: at? Esa es la distinción más obvia entre los dos, y no es algo que realmente puedas ignorar al elegir uno u otro. –

5

Están en el espacio de nombres std. Como todas las partes de la biblioteca estándar de C++. Por lo tanto, se llaman correctamente std::list y std::vector.

Tampoco tienen funciones de miembros llamadas add. Es posible que desee buscar un C++ reference.

1

Trate

std::list<Bubble> bubbles; 
std::vector<Bubble> bubbles_two; 

listas y los vectores se definen en las std espacio de nombres.

2

listvector y se encuentran en el espacio de nombres std, y que en consecuencia hay que buscar allí.

std::vector<Bubble> bubbles;

En cualquiera de los casos, se utiliza .push_back para anexar al contenedor.En caso de duda, generalmente debe preferir vector.

4

El vector y la lista son parte del espacio de nombres estándar. Por lo que debe declararse su vector y la lista de la siguiente manera:

std::list<Bubble> bubbles; 
std::vector<Bubble> bubbles_two; 

Además, la función miembro para añadir un elemento es push_back.

2

Aquí falta el espacio de nombre. Tanto la lista como el vector forman parte del espacio de nombres estándar, lo que significa que puede incluir el espacio de nombres global escribiendo using namespace std; una vez al comienzo del archivo o escribiendo std::list y std::vector en todos los lugares donde utilice las variables.