2010-04-09 4 views
10

Ich habe eine std :: deque, und ich möchte ein Element an einem angegebenen Index einfügen (ich bin mir bewusst, dass std :: list wäre besser hier). Die Funktion deque :: insert() benötigt einen Iterator, um den einzufügenden Ort anzugeben. Wie kann ich mit einem Index einen Iterator erhalten, der auf diesen Ort verweist, so dass ich diesen Iterator an insert() übergeben kann?std :: deque: Wie bekomme ich einen Iterator, der auf das Element bei einem bestimmten Index zeigt?

Zum Beispiel:

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

Ich bin sicher, dass dies eine sehr grundlegende Frage ist, und ich entschuldige mich dafür. Es ist lange her, seit ich die STL benutzt habe, und ich sehe in der Mitgliederliste von std :: deque nichts, was offensichtlich das tut, was ich will. Vielen Dank.

+1

Eigentlich deque als Liste an das besser ist. –

+0

Neil, bist du sicher? http://www.sgi.com/tech/stl/Deque.html sagt, es unterstützt "lineare Zeit einfügen [...] in der Mitte", während http://www.sgi.com/tech/stl/List .html hat "konstante Zeit einfügen [...] in der Mitte." –

+0

@Matthew Aber zuerst müssen Sie den Einfügepunkt finden. –

Antwort

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

Vielen Dank! –

10

A deque unterstützt wahlfreier Zugriff, so sollten Sie in der Lage sein zu sagen,

things.insert(my_deque.begin() + index, thing); 
Verwandte Themen