2014-09-15 10 views
6

Załóżmy, że mam wektor A = {1 0 1 1 0 0 0 1 0}. Teraz chcę uzyskać indeksy wszystkich wystąpień 0 zwróconych jako inny wektor B.Wyszukiwanie indeksów wszystkich wystąpień elementu w wektorze

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

} 

Oto początek:

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

@ScottMorken że nie powinno być 'template std :: vector ...'? OP szukał zestawu wskaźników, a nie zestawu kopii elementów. – jaggedSpire

+0

Tak, masz rację, ponownie zredagowany –

Odpowiedz

11

Wystarczy zadzwonić std::find_if znowu z wcześniej zwrócony iterator (plus jeden), jak na początku. Wykonuj pętlę do momentu, aż std::find_if powróci A.end().


Przykładowy kod

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

    iter++; 
} 
+0

Czy możesz wyjaśnić bardziej szczegółowo, czego nie dostałem. – Hum

+0

@Hum Dodano kod. –

+0

Dzięki, zrobiłem to std :: vector :: iterator iter = data.begin(); podczas ((iter = std :: find (iter, data.end(), 0))! = Data.end()) { int idx = std :: distance (data.begin(), iter); cout << idx; iter ++; } – Hum

Powiązane problemy