Durchlaufen std-Warteschlange
Ich versuche, BOOST_FOREACH für das Durchlaufen der std::queue. Aber es ist nicht Iteratoren, die in dieser Klasse dazu führen, dass ich einen Fehler:
std::queue<std::string> someList;
BOOST_FOREACH(std::string temp, someList)
{
std::cout << temp;
}
>no matching function for call to begin(...)
>no type named ‘iterator’ in ‘class std::queue<std::basic_string<char> >’
Muss ich in der Struktur wie: der erste kommt, der erste Weg geht.
- Mögliche Duplikate von: stackoverflow.com/questions/1259099
Du musst angemeldet sein, um einen Kommentar abzugeben.
std::deque
unterstützt effizientes einfügen und entfernen am Anfang und Ende der Daten-Struktur. Sie können tun, queue-Operationen manuell mitpush_back
undpop_front
.Einer Warteschlange verwendet eine deque intern standardmäßig. Es ist ein wrapper, der nur macht queue-Operationen (daher, warum können Sie nicht Durchlaufen, es). Ich fragte einen ähnliche Frage eine Weile zurück, und die beste Antwort darauf gab mir einen guten Einblick in die Reale Nutzung
std::queue
. Sollte manstd::queue
nicht, da braucht man eine Warteschlange, sondern um deutlich zu machen, dass nur die queue-Operationen wie legal sind auf einer bestimmten Datenstruktur. Es klingt wie Sie brauchen mehr Freiheit als das, so gehen Sie mit deque, list, oder eine andere Struktur mit O(1) einfügen und entfernen an beiden enden.können Sie verwenden
std::list mit push_front und pop_back
std::queue
ist ein container-Adapter. Es nutztstd::deque
als die zugrunde liegenden Standard-container. Der Zugang zu diesem container ist nicht möglich und somit ist keine iteration in keiner Weise.Der beste Weg ist die Verwendung eines
std::deque
oderstd::list
und verwalten der Warteschlange Verhalten selbst. Möglicherweise bieten Ihre eigenen wrapper um ihn herum.