tengo este código:Cómo iterar std :: set?
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = it; // error here
}
No hay valor ->first
. ¿Cómo puedo obtener el valor?
tengo este código:Cómo iterar std :: set?
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = it; // error here
}
No hay valor ->first
. ¿Cómo puedo obtener el valor?
Debe desreferenciar el iterador para recuperar el miembro de su conjunto.
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = *it; // Note the "*" here
}
Si tiene C++ 11 rasgos, se puede utilizar un range-based for loop:
for(auto f : SERVER_IPS) {
// use f here
}
sólo tiene que utilizar el *
antes it
:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); it++) {
cout << *it;
}
Esto elimina referencia a ella y le permite acceder al elemento en el que el iterador está actualmente.
Una nota menor: generalmente se prefiere usar ++ en lugar de ++ para los bucles para evitar una copia adicional del iterador. – user2891462
Ésta es una solución completa a la pregunta:
¿Cómo iterar 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 incluso 'para (auto i: mset) std :: cout << i;' –
Otro ejemplo para C++ 11 standart:
set<int> data;
data.insert(4);
data.insert(5);
for (const int &number : data)
cout << number;
@ Mr.C64 No es que importe mucho con tipos enteros como en este caso. –
Vale la pena señalar que debe usar el primero si tiene la intención de modificar el contenedor. Para los googlers eso es. –
Creo que la solución C++ 11 debe ser con referencia (auto y f). Es mejor para la mayoría de los casos. Para este caso específico también. – jaskmar