2010-04-09 8 views
10

Tengo std :: deque, y quiero insertar un elemento en un índice específico (soy consciente de que std :: list sería mejor en esto). La función deque :: insert() toma un iterador para especificar la ubicación para insertar. Dado un índice, ¿cómo puedo obtener un iterador apuntando a esa ubicación, de modo que pueda pasar ese iterador a insert()?std :: deque: ¿Cómo obtengo un iterador apuntando al elemento en un índice especificado?

Por ejemplo:

void insertThing (deque<Thing> & things, Thing thing, size_t index) 
{ 
    deque<Thing>::iterator it = /* what do I do here? */ 
    things.insert (it, thing); 
} 

estoy seguro de que esto es una pregunta muy básica, y me disculpo por ello. Ha pasado mucho tiempo desde que utilicé el STL, y no veo nada en la lista de miembros de std :: deque que obviamente haga lo que quiero. Gracias.

+1

En realidad, deque es mejor que en este listado. –

+0

Neil, ¿estás seguro? http://www.sgi.com/tech/stl/Deque.html dice que admite "inserción de tiempo lineal [...] en el medio", mientras que http://www.sgi.com/tech/stl/List .html tiene "inserción de tiempo constante [...] en el medio". –

+0

@Matthew Pero primero debe encontrar el punto de inserción. –

Respuesta

22
void insertThing (deque<Thing> & things, Thing thing, size_t index) 
{ 
    deque<Thing>::iterator it = things.begin() + index; 
    things.insert (it, thing); 
} 
+0

¡Muchas gracias! –

10

Un deque soporta acceso aleatorio, por lo que debería ser capaz de decir

things.insert(my_deque.begin() + index, thing); 
Cuestiones relacionadas