2012-01-18 13 views
8

Tengo un conjunto de tipo set<int> y quiero obtener un iterador en algún lugar que no sea el comienzo.Obtener elemento del índice arbitrario en el conjunto

que estoy haciendo lo siguiente:

set<int>::iterator it = myset.begin() + 5; 

tengo curiosidad por qué esto no está funcionando y lo que es la forma correcta para obtener un iterador a donde yo quiero.

+3

C y C++ no son del mismo idioma. –

Respuesta

17

myset.begin() + 5; solo funciona para iteradores de acceso aleatorio, que los iteradores de std::set no lo son.

Para iteradores de entrada, hay la función std::advance:

set<int>::iterator it = myset.begin(); 
std::advance(it, 5); // now it is advanced by five 

En C++ 11, también hay std::next que es similar pero no cambia su argumento:

auto it = std::next(myset.begin(), 5); 

std::next requiere una iterador directo Pero dado que std::set<int>::iterator es un iterador bidireccional, tanto advance como next funcionarán.

Cuestiones relacionadas