Iteriert durch die Std-Warteschlange

7

Ich versuche, BOOST_FOREACH zu verwenden, um durch die std :: queue zu iterieren. Aber es gibt keine Iteratoren in dieser Klasse, weil ich einen Fehler habe:

%Vor%

Ich brauche in der Struktur wie: der erste kommt, der erste geht weg.

    
Ockonal 01.06.2010, 14:16
quelle

3 Antworten

19

std::deque unterstützt das effiziente Einfügen und Entfernen am Anfang und Ende der Datenstruktur. Sie können Warteschlangenvorgänge manuell mit push_back und pop_front ausführen.

Eine Warteschlange verwendet intern standardmäßig eine Deque. Es ist ein Wrapper, der nur Warteschlangenoperationen verfügbar macht (weshalb Sie nicht darüber iterieren können). Ich fragte eine ähnliche Frage während zurück, und die beste Antwort gab mir einen guten Einblick in die reale Verwendung von std::queue . Man sollte std::queue nicht verwenden, weil man eine Warteschlange benötigt, sondern um zu verdeutlichen, dass nur warteschlangenartige Operationen für eine gegebene Datenstruktur zulässig sind. Es klingt, als ob Sie mehr Freiheit als das brauchen, also gehen Sie mit deque, list oder einer anderen Struktur mit O (1) an beiden Enden einfügen und entfernen.

    
Michael Kristofik 01.06.2010, 14:17
quelle
4

können Sie verwenden std :: list mit push_front und pop_back

    
chub 01.06.2010 14:18
quelle
1

std::queue ist ein Containeradapter. Es verwendet std::deque als den zugrunde liegenden Standardcontainer. Der Zugriff auf diesen Container ist nicht möglich und daher keine Iteration.

Am besten verwenden Sie std::deque oder std::list und verwalten das Warteschlangenverhalten selbst. Möglicherweise stellen Sie Ihren eigenen Wrapper dar.

    
pmr 01.06.2010 14:22
quelle

Tags und Links