es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comportamiento incorrecto del bucle for en C++ y Qt 6.2

Antes que nada, soy un principiante completo en C++ y Qt, y estoy usando Qt 6.2 y C++11. Este es el código con el que tengo problemas:

QSet<><qstring>> listSet;
for(int i = 0; i < 10; i++)
{
    QList<qstring> myList;
    for(int r = 0; r < 10; r++)
    {
        myList << "Item" + QString::number(r);
    }
    listSet.insert(myList);
}

qInfo() << listSet.count();

Esperaba obtener la salida de “10”, pero en su lugar obtuve “1”. Cambié el código a esto y solucionó el problema, pero simplemente no puedo entenderlo:

QSet<><qstring>> listSet;
for(int i = 0; i < 10; i++)
{
    QList<qstring> myList;
    myList << "default" + QString::number(i);
    for(int r = 0; r < 10; r++)
    {
        myList << "Item" + QString::number(r);
    }
    listSet.insert(myList);
}

qInfo() << listSet.count();

Quiero saber por qué C++ se comporta de esta manera.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el primer código es que crea 10 listas idénticas y las inserta en el conjunto. Esto sucede porque los elementos de QString en cada lista tienen el mismo valor, por lo que el conjunto los considera duplicados y solo mantiene uno.

    En el segundo código, se agrega un identificador único a cada lista mediante la adición del índice i al primer elemento de la lista. Esto asegura que cada lista sea distinta y resuelve el problema.

    En general, al usar contenedores de Qt como QSet y QList, es importante asegurarse de que los elementos que se están insertando tengan valores únicos, de lo contrario pueden ocurrir resultados inesperados.

Comments are closed.