Ist es möglich, einen konstanten Iterator von einem Vektor zu erhalten, der nur einen bestimmten Bereich des Vektors durchlaufen kann, bevor er ungültig gemacht wird?
Wenn ich beispielsweise einen Vektor mit 10 Elementen habe, möchte ich einen Iterator der Elemente 4 bis 7 zurückgeben.
Pseudocode:
%Vor%Das ist ziemlich trivial (obwohl ich das Ergebnis als Bereich, nicht als Iterator bezeichnen würde).
Eine einfache Implementierung würde etwa so aussehen:
%Vor% Wie es jetzt aussieht, folgt dies normalen C ++ - Konventionen (0-basiertes Zählen, das Ende, das Sie angeben, ist über dem Ende des Bereichs, nicht drin). Um die gewünschte Ausgabe zu erhalten, würden Sie a angeben Bereich von 3, 7
, wie:
Beachten Sie, dass die bereichsbasierte for
-Schleife weiß, wie die% member-Funktionen begin
und end
verwendet werden, um den zu iterierenden Bereich anzugeben, so dass wir nicht mit dem Iterator ungültig machen müssen wir müssen nur den Anfang und das Ende des Bereichs angeben, der uns wichtig ist.
Sie könnten die range-v3 Bibliothek verwenden, die die Basis eines Ranges TS ist Das ist Teil von C ++ 20 , aber die Bibliothek funktioniert bereits mit C ++ 11-Compilern. Hier ist wie:
%Vor%Sie können dies verwenden
%Vor%Der Code unten ist eine kleine Demonstration
%Vor%Die Ausgabe ist
%Vor%Sie können eine span verwenden :
%Vor%Anmerkungen: