Probemilla con iteradores en C++

Leunamal

Hola, estoy intentando programar el algoritmo de ordenación por inserción pasando el algoritmo en pseudocódigo que nos facilitó el profesor a C++ usando plantillas e iteradores.

Mi problema reside en las siguientes lineas de código:

template <typename Iterador>
void insercion(Iterador principio, Iterador fin)
{
for(Iterador k = principio+1; k != fin; k++){
Iterador j = k;
Iterador x = j; <============
...
[El resto del código no es relevante]

Mi problema reside en que yo quiero que en x se copie lo que hay en j. Es decir, lo ideal es que me dejase poner: *x = *j pero no me deja, por eso puse Iterador x = j.

Así no me da ningun problema de compilación, pero me ocurre lo siguiente:
No se produce realmente una copia de j, x apunta al mismo sitio que j de manera que si modifico j, x se modifica, consecuentemente el algoritmo va como el culo xd.

No se el porqué no me deja hacer esto:
int x = (int) *j;

:S Esto me ralla. Lo que quiero hacer es que se guarde en x una copia de j, pueda modificar j sin que cambie x.

¿Alguien me podría decír que debo hacer?

Un saludo y gracias.

Leunamal

Bueno como viene siendome habitual yo mismo me autorespondo ya que he encontrado con la solución:

hay que usar lo siguiente:

typename iterator_traits<I>::value_type x;

De esa forma ya podemos hacer lo siguiente:

x = *j;

y luego hacer : x = *j. Sin importar de que haya cambiado el valor de j.

Saludos ^^

Usuarios habituales

  • Leunamal