Ho questo codice:Come iterare std :: set?
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = it; // error here
}
Non v'è alcun valore ->first
. Come posso ottenere il valore?
Ho questo codice:Come iterare std :: set?
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = it; // error here
}
Non v'è alcun valore ->first
. Come posso ottenere il valore?
È necessario annullare l'iteratore per recuperare il membro del set.
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = *it; // Note the "*" here
}
Se si dispone di C++ 11 caratteristiche, è possibile utilizzare un range-based for loop:
for(auto f : SERVER_IPS) {
// use f here
}
Basta usare il *
prima it
:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); it++) {
cout << *it;
}
Questo dereferenzia e consente di accedere all'elemento su cui è in esecuzione l'iteratore.
Solo una piccola nota: generalmente è preferibile usare ++ it anziché ++ in per loop per evitare una copia extra dell'iteratore. – user2891462
Si tratta di una soluzione completa alla domanda:
Come eseguire iterazioni std :: set?
int main(int argc,char *argv[])
{
std::set<int> mset;
mset.insert(1);
mset.insert(2);
mset.insert(3);
for (auto it = mset.begin(); it != mset.end(); it++)
std::cout << *it;
}
O anche 'for (auto i: mset) std :: cout << i;' –
Un altro esempio per C++ 11 standart:
set<int> data;
data.insert(4);
data.insert(5);
for (const int &number : data)
cout << number;
@ Mr.C64 Non che sia importante tanto con tipi integrali come in questo caso. –
Potrebbe valere la pena notare che è necessario utilizzare il primo se si intende modificare il contenitore. Per i googler che è. –
I cosa C++ 11 soluzione dovrebbe essere con riferimento (auto & f). È meglio per la maggior parte dei casi. Anche per questo caso specifico. – jaskmar