Suche nach aufeinanderfolgenden Elementen in einem Vektor

8

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

%Vor%

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

habe %Vor%

Macht es Sinn?

    
polapts 03.07.2013, 13:42
quelle

3 Antworten

1

Ehrlich gesagt, ich finde keinen klaren Nachteil der Verwendung einer einfachen handgefertigten Schleife anstelle von Standardfunktionen:

%Vor%     
ChronoTrigger 03.07.2013, 14:13
quelle
3

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.

%Vor%

Ausgabe:

%Vor%

Sehen Sie sich die Demo unter Ссылка an.

    
hmjd 03.07.2013 14:07
quelle
2

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.

    
Some programmer dude 03.07.2013 13:59
quelle

Tags und Links