Autor Tema: Ayuda: Como obterner el # de columnas usando la biblioteca VECTOR de C++  (Leído 2788 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Hola dentro del siguiente codigo la función  SIZE_N_MATRIX2D obtiene el numero de filas (n) de un matriz usando la biblioteca VECTOR, pero no se como obtener el número de columnas (m)

Código: C++
  1. int SIZE_N_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){
  2.         int n = matriz2D_in.size();
  3.         //cout << "n=" << n << endl;
  4.         return n;
  5. }

Código: C++
  1. int SIZE_M_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){
  2.         system("pause");
  3.         //int m = ;  // <= HELP
  4.         //cout << "m=" << m << endl;
  5.         return m;
  6. }


Código: C++
  1. // BIBLIOTECA DE VECTORES Y MATRICES By CompSystems aka (jaiMeza) version 0.2.0 Noviembre 3 del 2014 //jaimeza.org
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include<vector>
  5. #include<algorithm>
  6. #include <iomanip> // Para salidas como: cout<< setw ( 3 )
  7.  
  8. using namespace std;
  9. typedef vector<int> TYPE_VECTOR_INT; define palabra clave VECTOR_INT como tipo vector
  10. typedef vector< TYPE_VECTOR_INT > TYPE_MATRIX2D_INT; // OR //typedef vector< vector<int> > TYPE_MATRIX2D_INT; //
  11. //typedef vector< vector<int> > TYPE_MATRIX3D;
  12.  
  13. TYPE_VECTOR_INT Make_vector( int n ){ // un solo argumento
  14.         TYPE_VECTOR_INT vector( n ); // crea un vector o formacion unidimensional
  15.         // vector<int> mi_vector(n);
  16.         return vector;
  17. }
  18.  
  19. // Funcion igual a la anterior pero con dos argumentos, el segundo valor es la constante a almacenar en todos el arreglo
  20. TYPE_VECTOR_INT Make_vector( int n, int constante ){  
  21.         TYPE_VECTOR_INT vector( constante ); // crea un vector o formacion unidimensional
  22.         // vector<int> mi_vector(n, constante );
  23.         return vector;
  24. }
  25.  
  26. // Funcion igual a la anterior pero sin argumentos, crea un arreglo unidemencional de tamnanio expandible
  27. TYPE_VECTOR_INT Make_vector( void ){  
  28.         TYPE_VECTOR_INT vector; // crea un vector o formacion unidimensional
  29.         // vector<int> mi_vector;
  30.         return vector;
  31. }
  32.  
  33. TYPE_MATRIX2D_INT Make_matriz2D( int n, int m ){
  34.         TYPE_MATRIX2D_INT matriz2D(n, TYPE_VECTOR_INT(m) ); // crea un arreglo o formacion bidimensional (matriz)
  35.         //vector< vector<int> > mi_matriz_2D(n, vector<int>(m) );
  36.         return matriz2D;
  37. }
  38.  
  39. int SIZE_N_VECTOR( TYPE_VECTOR_INT vector_in ){
  40.         return vector_in.size();
  41. }
  42.  
  43. int SIZE_N_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){
  44.         return matriz2D_in.size();
  45. }
  46.  
  47. int SIZE_M_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){
  48.         return matriz2D_in[0].size(  );
  49. }
  50.  
  51. bool Es_matriz2D_cuadrada( TYPE_MATRIX2D_INT matriz2D_in ){
  52.         if ( Es_matriz2D( INT matriz2D_in ) ){
  53.                 int size_n = SIZE_N_MATRIX2D( matriz2D_in );
  54.                 int size_m = SIZE_M_MATRIX2D( matriz2D_in );
  55.                 if ( size_n == size_m )
  56.                         return true;
  57.                 else
  58.                         return false;
  59.         }      
  60. }
  61.  
  62. bool Es_matriz2D( TYPE_MATRIX2D_INT matriz2D_in ){
  63.         int size_n = SIZE_N_MATRIX2D( matriz2D_in );
  64.         int size_m = SIZE_M_MATRIX2D( matriz2D_in );
  65.         if ( size_n >= 1 and size_m >= 1 )
  66.                 return true;
  67.         else
  68.                 return false;
  69. }
  70.  
  71. bool Es_vector( TYPE_VECTOR_INT vector_in ){
  72.         int size_n = SIZE_N_VECTOR( vector_in );
  73.         if ( size_n >= 1 )
  74.                 return true;
  75.         else
  76.                 return false;
  77. }
  78.  
  79.  
  80. TYPE_MATRIX2D_INT Ingresar_matriz_2D( int n, int m ){
  81.         if ( n>0 and m>0 ){
  82.                 TYPE_MATRIX2D_INT matriz2D=Make_matriz2D(n, m); // crea un arreglo o formacion bidimensional (matriz)
  83.                 cout << "Introducir elementos en la matriz de " << n << " filas x " << m << " columnas" << endl;
  84.                 for ( int i = 0; i < n; i++ ) {
  85.                         for ( int j = 0; j < m; j++ ){
  86.                                 cout << "Elemento posicion ("<<i+1<<","<<j+1<<")= ";
  87.                                 cin >> matriz2D[i][j];
  88.                         }
  89.                 }
  90.                 cout<<endl;
  91.                 return matriz2D;
  92.     }
  93.         //else ;// como aborto la ejecucion?
  94. }
  95.  
  96. TYPE_VECTOR_INT Ingresar_vector( int n ){
  97.         if ( n>=1 ){
  98.                 TYPE_VECTOR_INT vector=Make_vector(n);
  99.                 cout << "Introducir elementos en el VECTOR de " << n << " valores" << endl;
  100.                 for ( int j = 0; j < n; j++ ){
  101.                         cout << "Elemento posicion ("<<j+1<<")= ";
  102.                         cin >> vector[j];
  103.                 }
  104.                 cout<<endl;
  105.                 return vector;
  106.         }
  107.         //else ;// como aborto la ejecucion?
  108. }
  109.  
  110. void Imprimir_vector2D( TYPE_VECTOR_INT vector_in ){
  111.         cout << "Vista en 2D del vector" << endl;
  112.         int size_n = SIZE_N_VECTOR( vector_in );
  113.         for ( int j = 1; j <= size_n; j++ ){
  114.                 if (j == 1) cout<< setw ( 3 ) << "[[";
  115.                 cout << setw ( 3 ) << vector_in[j-1];
  116.                 if (j != size_n) cout << ",";
  117.                 if (j == size_n) cout << setw ( 3 ) << "]]"<< endl;
  118.         }
  119.  
  120. }
  121.  
  122. void Imprimir_matriz2D( TYPE_MATRIX2D_INT matriz2D_in, int m ){
  123.         cout << "Vista en 2D de la matriz" << endl;
  124.         int size_n = SIZE_N_MATRIX2D( matriz2D_in );
  125.         cout<< setw ( 3 ) << "[[";
  126.         for ( int i = 1; i <= size_n; i++ ){
  127.                 for ( int j = 1; j <= m; j++ ){
  128.                         if (i*j == i and i*j != 1 )
  129.                                 cout << setw ( 3 ) << "[";
  130.                         cout << setw ( 3 ) << matriz2D_in[i-1][j-1];
  131.                         if (j != m) cout << ",";
  132.                         if (i*j == i*m)
  133.                                 cout<< setw ( 3 ) << "]";
  134.                         if (i*j == size_n*m )
  135.                                 cout << "]";
  136.                 }
  137.                 cout << endl;
  138.         }
  139. }
  140.  
  141. bool Es_matriz2D_identidad( TYPE_MATRIX2D_INT matriz2D_in ){
  142.         if ( Es_matriz2D( INT matriz2D_in ) ){
  143.                 bool flag_mIdentidad=true;  // flag (indicador) de matriz identidad
  144.                 int i=0, j=0; // posicion inicial
  145.                 int size_n = SIZE_N_MATRIX2D( matriz2D_in );
  146.                
  147.                 while( i < size_n and (flag_mIdentidad == true) ){ // recorre por filas y verifica el flag de identidad ( solo 1s en la diagonal y 0s en el resto )
  148.                         while( j < size_n and flag_mIdentidad ){ // recorre por columnas
  149.                                
  150.                                 flag_mIdentidad = ( (i==j and matriz2D_in[i][j] == 1 )// en posiciones iguales de i, j debe haber un 1, retorna true
  151.                                         or (i != j and matriz2D_in[i][j] == 0 ) ); // en posiciones diferentes de i, j debe haber un 0, retorna true
  152.                                 // si las dos condiciones anteriores son falsas, no es una matriz identidad
  153.                                 if( flag_mIdentidad == true )
  154.                                         j++; // incrementa el numero de columna
  155.                         }
  156.                         i++;  // incrementa el numero de fila
  157.                 }
  158.                 return flag_mIdentidad;
  159.         }
  160. }
  161.  
  162. bool Es_matriz2D_triangularSup( TYPE_MATRIX2D_INT matriz2D_in ){
  163.         if ( Es_matriz2D_cuadrada( matriz2D_in ) == true ){
  164.                 bool p=false; // flag (indicador) de triangularidad
  165.                 int i=0,j=0;  // posicion inicial
  166.                 int size_n = SIZE_N_MATRIX2D( matriz2D_in );
  167.                
  168.                 while( i < size_n and not p ){ // recorre por filas y verifica el flag de triangularidad superior
  169.                         while(j<size_n and not p){
  170.                                 if( (i==j and matriz2D_in[i][j]==0 ) or ( i>j and matriz2D_in[i][j]!=0) )
  171.                                         p=true;
  172.                                 else
  173.                                         j++;
  174.                         }
  175.                         i++;
  176.                 }
  177.                 return p;
  178.         }
  179. }
  180.  
  181. bool Es_matriz2D_triangularInf( TYPE_MATRIX2D_INT matriz2D_in ){
  182.         if ( Es_matriz2D_cuadrada( matriz2D_in ) == true ){
  183.                 bool p=false; // flag (indicador) de triangularidad inferior
  184.                 // ... en construccion
  185.                 return p;
  186.         }
  187. }
  188.  
  189. bool Es_matriz2D_simetrica( TYPE_MATRIX2D_INT matriz2D_in ){
  190.         if ( Es_matriz2D_cuadrada( matriz2D_in ) == true ){
  191.                 bool p=true;
  192.                 int i=0;
  193.                 int size_n = SIZE_N_MATRIX2D( matriz2D_in );
  194.                 while(i< size_n-1 and p){
  195.                         int j=i+1;
  196.                         while(j< size_n and p){
  197.                                 if( matriz2D_in[i][j]!= matriz2D_in[j][i])
  198.                                         p=false;
  199.                                 else
  200.                                         j++;
  201.                         }
  202.                         i++;
  203.                 }
  204.                 return p;
  205.         }
  206. }
  207.  
  208. bool Es_matriz2D_antsimetrica( TYPE_MATRIX2D_INT matriz2D_in ){
  209.         if ( Es_matriz2D_cuadrada( matriz2D_in ) == true ){
  210.                 bool p=true;
  211.                 // ... en construccion
  212.                 return p;
  213.         }
  214. }
  215.  
  216. //TYPE_MATRIX2D_INT Determinante( TYPE_MATRIX2D_INT matriz2D_in ){} // ... en construccion
  217.  
  218.  
  219. int main(int argc, char *argv[]) {
  220.        
  221.         // pedir dimension de entrada (2D)
  222.         int m,n;
  223.         cout<<"introduzca el numero de filas: ";
  224.         cin>>n;
  225.         cout<<"introduzca el numero de columnas: ";
  226.         cin>>m;
  227.         cout<<'\n';
  228.        
  229.         TYPE_MATRIX2D_INT matriz=Make_matriz2D(n, m); // crea un arreglo o formacion bidimensional (matriz)
  230.         Es_matriz2D(matriz);
  231.         matriz = Ingresar_matriz_2D( n, m );
  232.         Imprimir_matriz2D( matriz, m );
  233.    
  234.         cout<<'\n';
  235.         // chequeo si es una matriz identidad
  236.         if( Es_matriz2D_identidad( matriz ) == true )
  237.                 cout<<"la matriz es identidad"<<endl;
  238.         else
  239.                 cout<<"la matriz no es identidad"<<endl;
  240.        
  241.         // chequeo si es una matriz triangular superior
  242.         if( Es_matriz2D_triangularSup( matriz ) == true )
  243.                 cout<<"la matriz ingresada no es triangular superior"<<endl;
  244.         else
  245.                 cout<<"la matriz ingresada no es triangular superior"<<endl;
  246.        
  247.         //  ¿Es una matriz simétrica?
  248.         if( Es_matriz2D_simetrica( matriz ) == true )
  249.                 cout<<"la matriz ingresada no es simetrica"<<endl;
  250.         else
  251.                 cout<<"la matriz ingresada no es simetrica"<<endl;
  252.        
  253.         cout<<'\n';
  254.         TYPE_VECTOR_INT mi_vector = Make_vector(4);
  255.         Imprimir_vector2D(mi_vector);
  256.         Es_vector(mi_vector);
  257.         mi_vector = Ingresar_vector(4);
  258.         Imprimir_vector2D(mi_vector);
  259.        
  260.         TYPE_VECTOR_INT mi_vector2 = Make_vector(4,1); // crea un vector de 4 elementos lleno de 1s  
  261.         Imprimir_vector2D(mi_vector2);
  262.         // reasignacion
  263.         mi_vector2[0] = 9;
  264.         mi_vector2[1] = 8;
  265.         mi_vector2[2] = 7;
  266.         mi_vector2[3] = 6;
  267.         Imprimir_vector2D(mi_vector2);
  268.        
  269.         TYPE_VECTOR_INT mi_vector3 = Make_vector();
  270.         mi_vector3.push_back(10); // agrega un elemento al vector pos [0]
  271.         mi_vector3.push_back(20); // agrega un elemento al vector pos [1]
  272.         mi_vector3.push_back(30); // agrega un elemento al vector pos [2]
  273.         cout<< mi_vector3[0]<< " "<< mi_vector3[1]<< " "<< mi_vector3[2] << endl ;
  274.         Imprimir_vector2D(mi_vector3);
  275.        
  276.         cout<<'\n';
  277.         system("pause");
  278.         return 0;
  279. }
  280.  
  281. //ejemplos
  282.  
  283. // identidad
  284. // http://es.wikipedia.org/wiki/Matriz_identidad
  285. // [[1, 0]
  286. //  [0, 1]
  287.        
  288. // triangular superior e inferior
  289. // http://es.wikipedia.org/wiki/Matriz_triangular
  290. // [[1, 4, 2]
  291. //  [0, 3, 4]
  292. //  [0, 0, 1]]
  293.  
  294. // simetrica
  295. // http://es.wikipedia.org/wiki/Matriz_sim%C3%A9trica
  296. // [[-8, -1, 3]
  297. //  [-1, 7, 4]
  298. //  [3, 4, 9]]
  299.  
  300. // Matriz antisimétrica
  301. // http://es.wikipedia.org/wiki/Matriz_antisim%C3%A9trica
  302.  
  303. // Matriz_transpuesta
  304. // http://es.wikipedia.org/wiki/Matriz_transpuesta

PD: también quien desee aportar otras subrutinas de algebra lineal o manipulación de matrices y vectores bienvenido sea

Gracias

« Última modificación: 04 de Noviembre de 2014, 10:19:07 por CompSystems »
Desde Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
« Última modificación: 03 de Noviembre de 2014, 16:12:29 por KILLERJC »

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Ayuda: Como obterner el # de columnas usando la biblioteca VECTOR de C++
« Respuesta #2 en: 03 de Noviembre de 2014, 23:33:29 »
Puede ser una opción con sizeof, pero mi interés es usando la biblioteca vector de c++
« Última modificación: 04 de Noviembre de 2014, 09:29:56 por CompSystems »
Desde Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Ayuda: Como obterner el # de columnas usando la plantilla VECTOR de C++
« Respuesta #3 en: 04 de Noviembre de 2014, 00:09:17 »
Podrias usar el mismo principio de lo que te pase. El tema acá creo que a no ser que lo hagas exactamente cuadrado, vas a tener que pasar por cada fila.

Podrias hacer

matriz2D_in[j].size();


http://stackoverflow.com/questions/4534830/c-size-of-a-2d-vector

Espero que sirva sino me doy por vencido :)

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Ayuda: Como obterner el # de columnas usando la biblioteca VECTOR de C++
« Respuesta #4 en: 04 de Noviembre de 2014, 08:56:31 »
ok Gracias, funciona. Claro es calcular el tamaño del primer vector o fila de la matriz "POR QUE NO SE ME HABIA OCURRIDO"  :oops:, se actualizo el código arriba.

Código: C++
  1. int SIZE_M_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){ //  retorna el tamaño de las columnas
  2.         system("pause");
  3.         int m = matriz2D_in[0].size(  ); // falla si el usuario entro una matriz de dimension (0,0)
  4.         cout << "m=" << m << endl;
  5.         return m;
  6. }

Pero hay un problema, si el usuario entró una matriz de tamaño (0, 0) entonces la sentencia matriz2D_in[0].size(  ); falla. Como hago para detectar este error dentro de la función SIZE_M_MATRIX2D y que el programa no termine abruptamente, se solucionaría chequeando el tamaño previo ingresado antes de entrar a la función SIZE_M_MATRIX2D, pero la idea es que no se conoce el tamaño, por eso se creo la función que retorna el numero de columnas (m).

La función que halla el # de filas (SIZE_N_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in )  si retorna 0, mientras que (SIZE_M_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in) falla por que no existe un vector en la primera posición

Gracias

PD: Mis programas siempre los codifico sin huecos es decir si el usuario principiante por sabotaje (para hacer fallar el programa a propósito y demostrar que esta malo) o por desconocimiento (Novato), puede entrar una matriz de (0,0) aunque no existe tales matrices en algebra lineal. por esta razón entonces yo siempre chequeo argumentos en casi todos las subrutinas de un código, alguien me decía subrutinas contra bobos, no estoy de acuerdo que sea contra bobos, simplemente sin huecos, para que nadie se caiga  :)

la idea es la siguiente

if ocurre un error en return matriz2D_in[0].size(  );

then retorne 0

end

He intentado lo siguiente pero falla, pues apenas se de TRY, CATCH

Código: C++
  1. #include <iostream>
  2. #include<vector>
  3. using namespace std;
  4.  
  5. typedef vector<int> TYPE_VECTOR_INT;
  6. typedef vector< TYPE_VECTOR_INT > TYPE_MATRIX2D_INT;
  7.  
  8. int SIZE_N_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){
  9.         int n = matriz2D_in.size();
  10.         cout << "n=" << n << endl;
  11.         return n;
  12. }
  13.  
  14. int SIZE_M_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){
  15.        
  16.         int m;
  17.        
  18.         // detección de errores o excepciones
  19.         try {
  20.                     m = matriz2D_in[0].size(  ); // sige el problema pues en tiempo de ejecucion se detendra, que otra solucion hay?
  21.                         if( m == 0 ) { // test de código a comprobar
  22.                                 string error_str = "el # de columnas es cero";
  23.                                 throw error_str; // El error actual es la cadena "error_str" luego se LANZA O se va la funcion (GOTO) CATCH
  24.                         }
  25.                         //else // si no ocurrio un error, continue
  26.                         m = matriz2D_in[0].size();
  27.                         cout << "m=" << m << endl;
  28.                         return m;
  29.                
  30.         }
  31.        
  32.         // El algoritmo entra en el siguiente bloque CATCH{} si y solo si ha ocurrido un error en el bloque TRY{}
  33.         catch(string error_str){ // CAPTURA el tipo de error
  34.                 // analisis de lo sucedido
  35.                 cout << "\nError: " << error_str << endl << endl; // imprime el tipo de error
  36.                 m=0;
  37.                 return m;
  38.         }
  39.                
  40. }
  41.  
  42. int main(int argc, char *argv[]) {
  43.        
  44.         vector< vector<int> > mi_matriz(2, vector<int>(3));
  45.         cout << "n de mi_matriz=" << SIZE_N_MATRIX2D(mi_matriz) << endl; // debe retornar 2
  46.         cout << "m de mi_matriz=" << SIZE_M_MATRIX2D(mi_matriz) << endl; // falla, debe retornar 3
  47.        
  48.         cout << endl;
  49.        
  50.         vector< vector<int> > mi_matriz1(0, vector<int>(0));
  51.         cout << "n de mi_matriz1=" << SIZE_N_MATRIX2D(mi_matriz1) << endl; // debe retornar 0
  52.         cout << "m de mi_matriz =" << SIZE_M_MATRIX2D(mi_matriz1) << endl;  // debe retornar 0
  53.         cout << endl;
  54. }

creo que no hay solucion simple, se requiere de alta ingenieria para solucionar el problema que planteo? no mentiras  :lol: solo que no me sirve hallar el numero de columnas con la sentencia m = matriz2D_in[0].size(  );  alguna alternativa
« Última modificación: 04 de Noviembre de 2014, 13:18:36 por CompSystems »
Desde Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Ayuda: Como obterner el # de columnas usando la biblioteca VECTOR de C++
« Respuesta #5 en: 04 de Noviembre de 2014, 13:53:55 »
Citar
PD: Mis programas siempre los codifico sin huecos es decir si el usuario principiante por sabotaje (para hacer fallar el programa a propósito y demostrar que esta malo) o por desconocimiento (Novato), puede entrar una matriz de (0,0) aunque no existe tales matrices en algebra lineal. por esta razón entonces yo siempre chequeo argumentos en casi todos las subrutinas de un código, alguien me decía subrutinas contra bobos, no estoy de acuerdo que sea contra bobos, simplemente sin huecos, para que nadie se caiga

Es que así debes realizar los codigos, limitando las operaciones a lo que vos queres que se haga.

Se me ocurren distintas maneras para solucionar el tema.

1- No permitir la creacion de un vector (0,0) , lo cual lo veo medio complejo por que puedo crear un vector (1,0) y luego modificarlo a (0,0)  (si es que entendi bien como se manejan los vectores al ser "dinamicos" y al ser vectores de vectores)
2- Usar el SIZE_N_MATRIX2D , dentro de SIZE_M_MATRIX2D para verificar que no sea de 0 elementos.
3- Esta tiene que ver con la 2, por que usar 2 funciones, si usas el caso de arriba (2) podes tranquilamente usar una funcion y que te devuelva un par de valores. Y en esa misma funcion verificas que rows > 0, sin manejo de exepciones.
4- Si aun asi no queres realizar ninguna de esas, usas try catch como dijiste, yo solamente lo utilize en JS (todo lo que se de C++ es por que lo estoy viendo ahora y buscando en google).

Leyendo el vector::size():

Citar
Exception safety :
If the container size is greater than n, the function never throws exceptions (no-throw guarantee). Otherwise, the behavior is undefined.

Por lo que lei podes usar :
matriz2D_in.at(0);

Citar
Exception safety
Strong guarantee: if an exception is thrown, there are no changes in the container. It throws out_of_range if n is out of bounds.

Al no existir envia una excepcion std::out_of_range , capturandolo con el try/catch

Quedando:

Código: [Seleccionar]
int SIZE_M_MATRIX2D( TYPE_MATRIX2D_INT matriz2D_in ){ //  retorna el tamaño de las columnas
system("pause");
try {
matriz2D_in.at(0);
int m = matriz2D_in[0].size(  ); // falla si el usuario entro una matriz de dimension (0,0)
}
catch(e) {
int m =0
}
cout << "m=" << m << endl;
return m;
}

Volviendo al tema de las acciones del usuario.
La otra cosa que me preocupa es que alguno no mediante esta libreria pueda cambiar el tamaño de uno de los vectores de una fila. Y que quede:

Fila 0 , 0 columnas
Fila 1 , 5 columnas
Fila 2 , 3 columnas

Dando por resultado 3,0
Por que por lo que lei son dinamicos y pueden cambiarse el tamaño de los mismos, el cual tus funciones estarian dando un mal resultado, y si tuvieras que pasar 1 por 1 las filas, estarias usando matriz2D_in.size( ) dentro para revisar las columnas, y se volveria ilogico tener 2 funciones.

Y pensandolo mejor, probaste si tu codigo acepta crear algo asi : (0,3) ? No deberia pero pensaba en eso y probar no cuesta nada .
La unica manera de solucionar esto es usando matrices y no vectores, pero es tu decision usar vectores, por lo cual te sigo



// EDIT

Por lo que vi en tu codigo, el try()/catch() lo queres hacer funcionar de otra forma, basicamente ejecuta lo que esta dentro de try(), al levantar una excepcion, automaticamente guarda el error en la la variable que definis dentro de catch( string error_c) y ejecuta el codigo de catch(), dejando de ejecutar el codigo de try(). El throw es como para levantar una excepcion "personalizada", si vos pones throw "PEPE", va a hacer que se detenga la ejecucion de try y ejecute catch donde error_c sea igual a "PEPE".
« Última modificación: 04 de Noviembre de 2014, 14:38:36 por KILLERJC »


 

anything