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
-
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
-
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