2014-09-15 13 views
6

Supponiamo di avere un vettore A = {1 0 1 1 0 0 0 1 0}. Ora voglio ottenere gli indici di tutte le occorrenze di 0 restituiti come un altro vettore B.Trovare gli indici di tutte le occorrenze di un elemento in un vettore

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

} 

Qui è un inizio:

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

@ScottMorken non dovrebbe che essere 'template std :: vector ...'? OP cercava una serie di indici, non un insieme di copie di elementi. – jaggedSpire

+0

sì hai ragione, modificato di nuovo –

risposta

11

Basta chiamare std::find_if di nuovo, con l'iteratore precedentemente restituita (più uno) come l'inizio. Fai un ciclo fino al std::find_if restituisce A.end().


codice di esempio

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

    iter++; 
} 
+0

puoi spiegare in modo più dettagliato non ho capito. – Hum

+0

@Hum Aggiunta del codice. –

+0

Grazie, l'ho reso std :: vector :: iterator iter = data.begin(); while ((iter = std :: find (iter, data.end(), 0))! = Data.end()) { int idx = std :: distance (data.begin(), iter); cout << idx; iter ++; } – Hum

Problemi correlati