2009-12-01 11 views
11

Qual è il modo migliore per iterare su tutte le coppie di elementi in contenitore std come std::list, std::set, std::vector, ecc?iterare su tutte le coppie di elementi in STD-contenitori (C++)

In pratica per fare l'equivalente di questo, ma con iteratori:

for (int i = 0; i < A.size()-1; i++) 
    for(int j = i+1; j < A.size(); j++) 
     cout << A[i] << A[j] << endl; 

risposta

11

Il modo più semplice è solo riscrivere il codice letteralmente:

for (auto i = foo.begin(); i != foo.end(); ++i) { 
    for (auto j = i; ++j != foo.end(); /**/) { 
    std::cout << *i << *j << std::endl; 
    } 
} 

Sostituire auto con un const_iterator per C++ 98/03. O metterlo nella sua propria funzione:

template<typename It> 
void for_each_pair(It begin, It end) { 
    for (It i = begin; i != end; ++i) { 
    for (It j = i; ++j != end; /**/) { 
     std::cout << *i << *j << std::endl; 
    } 
    } 
} 
+0

'auto' non fa parte dello standard corrente. –

+0

Vero, pigrizia qui. Commento aggiunto. – MSalters

+0

Neat! Sei già in modalità 1x! – xtofl

1

Proprio per attraversare, utilizzare const_iterators. Se si desidera modificare i valori, utilizzare iteratore.

Esempio:

typedef std::vector<int> IntVec; 

IntVec vec; 

// ... 

IntVec::const_iterator iter_cur = vec.begin(); 
IntVec::const_iterator iter_end = vec.end(); 
while (iter_cur != iter_end) { 
    int val = *iter_cur; 
    // Do stuff with val here 
    iter_cur++; 
} 
Problemi correlati