Ich arbeite an einem Problem, bei dem ich Subvektoren aus einem größeren Vektor erstellen muss. Wenn die Elemente im Vektor aufeinanderfolgend sind, muss ich einen Vektor dieser Elemente erstellen. Wenn es Elemente gibt, die nicht aufeinanderfolgend sind, wird ein Vektor dieser einzelnen Elemente erzeugt. Meine Logik ist wie folgt
%Vor% Der Funktor NotConsecutive
ist wie folgt
Also erwarte ich, dass std::adjacent_find
mir die Iteratoren zurückgibt, so dass ich den Vektor eins {0,1,2,3}, den Vektor zwei {5} und den Vektor {8} erzeugen kann. Aber ich bin mir nicht sicher, ob es einen einfacheren Weg gibt?
Bearbeiten: Ich habe vergessen zu erwähnen, dass ich std::adjacent_find
in einer Schleife als
Macht es Sinn?
Ehrlich gesagt, ich finde keinen klaren Nachteil der Verwendung einer einfachen handgefertigten Schleife anstelle von Standardfunktionen:
%Vor% Ich denke, das wird gefragt. Es verwendet nicht adjacent_find()
, sondern iteriert manuell durch das vector
, das ein vector<vector<int>>
enthält, das die extrahierten Untervektoren enthält. Es ist ziemlich einfach, IMO.
Ausgabe:
%Vor%Sehen Sie sich die Demo unter Ссылка an.
Aufgrund der Einschränkungen von std::adjacent_find
können Sie es nicht so verwenden, wie Sie es möchten zu. Es kann jedoch immer noch nützlich sein.
Was Sie können tun, besteht darin, über die Sammlung zu iterieren und std::adjacent_find
in einer Schleife mit dem letzten zurückgegebenen Iterator (oder Ihrem äußeren Schleifeniterator für den ersten Aufruf) zu verwenden, bis% zurückgegeben wird. Code%. Dann haben Sie eine komplette Reihe von aufeinanderfolgenden Elementen. Fahren Sie dann mit der äußeren Schleife fort, von der aus der letzte Aufruf von end
einen Nicht-End-Iterator zurückgegeben hat.
Tags und Links c++