queue STL
-
Wie durchlaufe ich eine queue der STL ohne den Inhalt zu löschen?
-
frager schrieb:
Wie durchlaufe ich eine queue der STL ohne den Inhalt zu löschen?
Gar nicht, da eine queue das nicht unterstuetzt, hier ein auszug aus der STL
Dokumentation:A queue is an adaptor that provides a restricted subset of Container functionality A queue is a "first in first out" (FIFO) data structure. [1] That is, elements are added to the back of the queue and may be removed from the front; Q.front() is the element that was added to the queue least recently. Queue does not allow iteration through its elements. [2]
Quelle: http://www.sgi.com/tech/stl/queue.html
mfg
v R
-
hi
hmm sollte eigentlich nicht möglich sein.
Könntest es natürlich so machen:
std::queue<int> int_queue; // wir nehmen an hier sind die Daten drin std::queue<int> tmp_queue; // ist leer while(!int_queue.empty()) { int tmp_var = int_queue.front(); tmp_queue.push(tmp_var); int_queue.pop(); }
MfG
-
Wenn man sowas braucht hat man mit Queue höchstwahrscheinlich die falsche Datenstruktur gewählt.
-
cooooser schrieb:
Wenn man sowas braucht hat man mit Queue höchstwahrscheinlich die falsche Datenstruktur gewählt.
Ja, irgendwie schon.
-
Was würdet ihr empfehlen wenn ich ständig die Liste durchgehen muss um ihre Einträge zu lesen und ab und zu den ersten Eintrag in der Liste löschen muss (FIFO).
-
Nabend,
ein std::vector<> sollte hier ausreichend sein. Du sagtest, dass du ab und zu
das erste Element entfernen musst. Fuer solche Zwecke, zum einfuegen und loeschen
des ersten und letzten Elementes, ist die std::deque<>-Klasse optimiert. Sie
sollte man aber nur dann einsetzen, wenn man sehr oft das erste oder letzte
Element loescht oder eins einfuegt. Ansonsten sollte der vector hier voellig
ausreichend sein (wie bereits gesagt).mfg
v R
-
frager schrieb:
Was würdet ihr empfehlen wenn ich ständig die Liste durchgehen muss um ihre Einträge zu lesen und ab und zu den ersten Eintrag in der Liste löschen muss (FIFO).
Wie virtuell Realisticer bereits erwähnt hat wäre std::vector am sinnvollsten.
// Durchlaufen des vectors: std::vector<int> int_vec; // erst mal ein paar testwerte einfügen int_vec.push_back(1); int_vec.push_back(2); int_vec.push_back(3); int_vec.push_back(4); // Hier beginnt das durchlaufen: std::vector<int>::iterator start = int_vec.begin(); std::vector<int>::iterator end = int_vec.end(); while(start != end) { // do foobar with it ++start; // nächstes Element } // Löschen des ersten elements: if(!int_vec.empty()) int_vec.erase(int_vec.begin());
MfG
-
vector macht nur dann sinn, wenn man ende löschen kann - die struktur also umkehrbar ist. denn vorne löschen ist verdammt lahm -> O(n)
da doch lieber dann ne liste nehmen... uU reicht ne single linked list?