Determinar el size() de cada fila de una Matriz



  • Tengo un QVector de (QVector<QVector<QString>> Temporales) y quiero saber como obtener la cantidad de elementos de cada fila de mi matriz.



  • Hola

    Si pones matriz[0].size() o matriz.at(0).size() ¿No te da el tamaño de la primera fila?

    O con un bucle:

    for(auto i = matriz.begin(); i < matriz.end(); i++)
        qDebug() << "tamaño fila " << i->size();
    

    No lo he probado, pero supongo que funciona.

    Un saludo



  • @juanki Como puedo llenar la matriz, cada vez que la trato de llenar el programa se detiene.



  • Hola

    Cuando tienes un error, acostúmbrate a poner el trozo de código que crees da el error y el error que obtienes, así será más fácil identificar el problema.

    Te recomiendo que le des un vistazo a la documentación de QVector, ya que tiene diferentes formas de añadir datos a un vector. Por ejemplo:

    QVector<QString> v1;
    v1.append("Hola");
    v1.append("mundo");;
    
    QVector<QString> v2;
    v2 << "soy" << "un" << "vector";
    

    También se puede añadir en una posición específica:

    v2.insert(0, "NO");
    

    En tu caso quieres usar un "vector de vectores", podría hacerse así:

    QVector<QVector<QString>> matriz;
    matriz << v1 << v2;
    

    Y para añadir un elemento, por ejemplo al primer vector:

    matriz[0].append(":)");
    

    Un saludo



  • @juanki Hola que tal, gracias por la recomendacion.

    Estoy tratando de llenar la matriz de 2-Dimensiones "Temporales" usando un loop (especificamente estoy usando un for) . Se supone que DefNombre concatenado con DefGrupo deben ser ingresados dentro de cada lista de mi matriz , sin embargo, en la segunda linea de este "for" aparece un error, el cual es:
    error: C2663: 'QList<QString>::append': 2 sobrecargas no tienen ninguna conversi¢n v lida para el puntero 'this'

        for(int c = 0; c < DefNombre.size(); c++){
        QString aux=DefNombre[c]+DefGrupo[c];//Ejemplo:aux=DefNombre[0]+DefGrupo[0]="José-G1"
         Temporales.at(c).append(aux);  //Ejemplo: Temporales[0][0] = "José-G1"(/ERROR)
         qDebug()<<Temporales[c];
        }
    

    PD: Si no uso at() sino operador [], el build ya no me cita error, pero el programa corre pero hace crash. Y el problema esta ahi porque si elimino todo ese codigo todo corre bien, pero esa matriz es imprescindible



  • Hola

    Ahí lo que veo es que usas el tamaño de DefNombre para controlar el bucle. ¿Temporales tiene las mismas filas que DefNombre? El método at tiene que recibir un índice válido y si DefNombre y Temporales no tiene las mismas filas, ya tienes un error ahí.

    Un saludo



  • @juanki Ah bueno si pero el error pasa con o sin bucle. Deberia funcionar ese ultimo ejemplo que tu pones, pero en mi caso no.

    matriz[0].append(":)");
    


  • Hola

    El operador [] también requiere de un índice válido, si tu vector de vectores o matriz está vacío, dará error:

    QVector<QVector<QString>> matriz;
    matriz[0].append("feliz"); // esto debe dar error
    

    En cambio, si ya tiene contenido. sí que funcionará:

    QVector<QVector<QString>> matriz;
    
    QVector<QString> f1;
    f1 << "Hola" << "Mundo";
    
    matriz << f1; // añadimos una fila a la matriz
    matriz[0].append("feliz"); // esto funcionará, ya tiene una fila
    
    matriz[1].append("error"); // en cambio, esto fallará, solo tenemos una fila
    

    Seguro que tendrás que replantearte la forma de llenar le matriz. O, si es de tamaño fijo, usar un array de toda la vida.

    Un saludo


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.