Bereichsbasierte Schleife für std :: queue

8

Ich versuche in meinem Projekt nach einem Ersatz in std::vector zu suchen, und ich habe herausgefunden, dass std::queue das ist, wonach ich suche.

Ich habe viele Funktionen, die range-based loop für die Iteration verwenden, und ich versuche, sie so weit wie möglich zu erhalten.

Ich versuche eine range-based loop in std::queue zu kompilieren, aber alles, was ich bekomme, sind Kompilierungsfehler

  

error: keine passende Funktion für den Aufruf von 'begin (std :: queue & amp;)'

Unterstützt std::queue die Entfernungsbasisschleife nicht?

Ich habe Google search versucht, aber kein Thema dazu gefunden.

Aktualisierung:

Mein Compiler ist GCC v4.7.1

-std=c++11 ist aktiviert

Und hier ist der fehlerhafte Testcode:

%Vor%     
mr5 23.12.2013, 11:27
quelle

1 Antwort

9

Nun, die Antwort ist eigentlich ziemlich einfach: Es gibt keine Funktion begin() in std::queue , und es gibt keine Überladung von std::begin , die eine std::queue entweder nimmt. Sie können sich die Dokumentation ansehen.

Das Kernproblem ist, dass std::queue nicht iteriert werden soll. Es existiert, um andere Bedürfnisse zu befriedigen. Wenn Sie wirklich darüber iterieren müssen, sollten Sie nur den zugrunde liegenden Container (standardmäßig std::deque ) verwenden, der die Iteration unterstützt und für den Ihr Code gültig wäre.

    
Morwenn 23.12.2013, 11:48
quelle

Tags und Links