2008-11-19 11 views
17

Quiero insertar algo en una lista STL en C++, pero solo tengo un iterador inverso. ¿Cuál es la forma usual de lograr esto?Cómo insertar con un reverse_iterator

Esto funciona: (por supuesto que lo hace)

std::list<int> l; 
std::list<int>::iterator forward = l.begin(); 
l.insert(forward, 5); 

Esto no funciona: (¿qué debería hacer en su lugar)

std::list<int> l; 
std::list<int>::reverse_iterator reverse = l.rbegin(); 
l.insert(reverse, 10); 

Respuesta

20

l.insert(reverse.base(), 10); insertará '10' al final , dada su definición del iterador 'inverso'. En realidad, l.rbegin().base() == l.end().

6

Básicamente, no es así. Ver 19.2.5 en TCPPPL.

El reverse_iterator tiene un miembro llamado base() que devolverá un iterador "regular". Así que el siguiente código funcionaría en su ejemplo:

l.insert (reverse.base(), 10);

Tenga cuidado porque el método base() devuelve el elemento uno después de que el original reverse_iterator haya apuntado. (Esto es para que reverse_iterators apuntando a rbegin() y rend() funcionen correctamente.)

Cuestiones relacionadas