2014-09-15 15 views
6

Angenommen, ich habe einen Vektor A = {1 0 1 1 0 0 0 1 0}. Jetzt möchte ich die Indizes aller Vorkommen von 0 als einen anderen Vektor B zurückgegeben. HierDie Indizes aller Vorkommen eines Elements in einem Vektor finden

template< class InputIt, class T> 
std::vector<int> IndicesOf(InputIt first, InputIt last, const T& value) { 

} 

ist ein Anfang:

std::vector<int>::iterator iter = std::find_if(A.begin(), A.end(), 0); 
B = std::distance(A.begin(), iter); 
+0

@ScottMorken sollte das nicht sein 'template std :: vector ...'? OP suchte nach einer Reihe von Indizes, nicht nach einer Reihe von Kopien von Elementen. – jaggedSpire

+0

ja du hast recht, nochmal bearbeitet –

Antwort

11

Gerade std::find_if wieder rufen, mit dem zuvor zurückgegebene Iterator (plus eins) als Anfang. Machen Sie in einer Schleife, bis std::find_ifA.end() zurückgibt.


Beispielcode

std::vector<int>::iterator iter = A.begin(); 
while ((iter = std::find_if(iter, A.end(), 0)) != A.end()) 
{ 
    // Do something with iter 

    iter++; 
} 
+0

kannst du bitte genauer erklären das habe ich nicht bekommen. – Hum

+0

@Hum Code hinzugefügt. –

+0

Danke, ich habe es std :: vector :: iterator iter = data.begin(); while ((iter = std :: finden (iter, data.end(), 0))! = Data.end()) { int idx = std :: distanz (data.begin(), iter); cout << idx; iter ++; } – Hum

Verwandte Themen