Justo, mil gracias!!
Dejo el código para intercambiar iteradores y ordenar con iteradores una lista alfabeticamente por si le sirve a alguien.
void Agenda::ordenaListas(){
Contacto auxiliar;
for(list<Contacto>::iterator it1 = listapal.begin(); it1 != --listapal.end(); it1++)
for(list<Contacto>::iterator it2 = (++it1)--; it2 != listapal.end(); it2++)
if(it1->comparar(it2->getNombre()))
{
auxiliar = *it1;
*it1 = *it2;
*it2 = auxiliar;
}
}
...
Más simple (y más C++). Usa el operador ">" de strings, los operadores next(),begin() de iterator, y swap!!
#include <string>
#include <utility> //swap
#include <list> //list
using namespace std;
...
// BubleSort
// P : listapal=A[0..N) N>=0
// Q : \forall i : 0 <= i < N-1: V[i] < V[i+1] and permut(listapal,A,N)
void Agenda::ordenaListas()
{
list<Contacto>::iterator it1, it2;
for( it1 = listapal.begin(); it1 != prev(listapal.end()); it1++)
for(it2 = next(it1); it2 != listapal.end(); it2++)
if (it1->getNombre() > it2->getNombre()) swap(*it1,*it2);
}
No puedo mandar resultados porque no tengo el resto de los componentes, (Contacto, Agenda)...
Fijaos que es una traducción del clasico en pseudocodigo.
En algún sitio he leído que hay que tener cuidado con usar el operador "<" en iteradores!. Tiene que estar definido por el programador del iterador!
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if(V[i]>V[j])
V[i],V[j]=V[j],V[i]; // Esto no existe en C