Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Loretz

#111
Hay un problema desde la primera línea:
Pares{ float a, int b}
Pares no tiene definido el tipo.
{float a, int n} no es una expresión C++ válida. Fíjate que están separados por una coma y que int n no termina en ;
También falta el ; al final de la expresión.

Después hay otras cosas, pero deberías tratar primero de que compile.
#112
std::istream::getline
http://www.cplusplus.com/reference/istream/istream/getline/

Son dos funciones
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );


La primera asume '\n' como delimitador; la segunda acepta el que le pongas.
Ese delimitador es el tercero de los parámetros, te está faltando el streamsize del medio.

Hay otro error además,
while(!arch.eof()){
arch activa el bit eof cuando se ha pretendido leer más allá del final, no cuando la próxima lectura pretenderá leerlo (¿cómo podría saberlo?).
#113
En C++11 también puedes usar el miembro sort de una std::list; hay varias formas, creo que la más usual es:

1) Defines el criterio de ordenación:
struct Orden {
    bool operator() (const Contacto& c1, const Contacto& c2)
    {
        return c1.nombre < c2.nombre;
    }
};

2) Lo usas en sort:
CitarAgenda.sort(Orden());
#114

listapal.sort([](const Contacto& c1, const Contacto& c2) { return c1.nombre <c2.nombre; });
Generic lambda está a partir del estándar C++14:
https://isocpp.org/wiki/faq/cpp14-language#generic-lambdas

#115
Un ejemplo con el estándar C++17

#include <iostream>
#include <string>
#include <list>

struct Contacto {
    std::string nombre;
    int nTlf;
};

void mostrar(const std::list<Contacto>& Agenda)
{
    for (const auto& [n, t] : Agenda) {
        std::cout << n << " -> " << t << '\n';
    }
    std::cout << '\n';
}

int main()
{
    std::list<Contacto> Agenda{ {"Juan", 14}, {"Ana", 23}, {"Susana", 19}, {"Abel", 22} };
    std::cout << "desordenada:\n";
    mostrar(Agenda);

    // ordenada por nombre:
    Agenda.sort([](const auto& c1, const auto& c2) { return c1.nombre < c2.nombre; });
    std::cout << "ordenada:\n";
    mostrar(Agenda);
}
#116
Mira, yo creo que en tu segundo for...
cuando haces:
jt=it;
estás asignando it a jt, y entonces, con
jt++;
lo que haces es incrementar los dos, jt apuntará al siguiente elemento en la lista, igual que it.

Luego...
if(!(contI.getNombre()<=contJ.getNombre()))
jamás se cumplirá porque contI y contJ son iguales (mismo nombre, mismo nTlf).

Y como esa condición jamás se cumple, el ciclo for interno va incrementando a jt (y también a it, que es el mismo iterador) hasta hacerlos igual a listapal.end().

Y ahora que it es == a listapal.end(), cuando vuelve a ejecutarse el incremento del ciclo for externo, it va a ser el siguiente de listapal.end() (undefined behavior), que va a cumplir con la condición
it != listapal.end();
porque efectivamente es distinto, es uno más allá que más allá del último.

¿Y entonces? El ciclo for más externo jamás se detendrá... (bueno, sí se detendrá, más temprano que tarde el sistema operativo se encargará de humillarte convenientemente).

Pregunta. La std::list ya tiene su método sort(), ¿por qué no lo usas?