Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala. Más...
#include <Matrix_Sparse.h>
Tipos públicos | |
| typedef E | value_type | 
| Tipo del objeto almacenado, similar al nombre usado en STL.  Más... | |
| typedef value_type & | reference | 
| Tipo del objeto almacenado, similar al nombre usado en STL.  Más... | |
| typedef const value_type & | const_reference | 
| Tipo del objeto almacenado, similar al nombre usado en STL.  Más... | |
| typedef unsigned | size_type | 
| Tipo del tamaño de un objeto, similar al nombre usado en STL.  Más... | |
Métodos públicos | |
| Matrix_Sparse (unsigned m=1, unsigned n=1) | |
| Constructor de vector.  Más... | |
| Matrix_Sparse (const Matrix_Sparse &o) | |
| Constructor de copia.  Más... | |
| Matrix_Sparse (const value_type V) | |
Matriz escalar de valor V.  Más... | |
| ~Matrix_Sparse () | |
| Destructor.  Más... | |
| unsigned | rows () const | 
| Cantidad de filas de la matriz.  Más... | |
| unsigned | cols () const | 
| Cantidad de columnas de la Matriz.  Más... | |
| unsigned | size () const | 
| Cantidad de valores almacenados en la matriz.  Más... | |
| unsigned | count () const | 
| Cantidad de valores almacenados en la matriz.  Más... | |
| size_type | capacity () const | 
| Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.  Más... | |
| Matrix_Sparse & | operator= (const Matrix_Sparse &o) | 
Sinónimo de this->copy(o)  Más... | |
| Matrix_Sparse & | copy (const Matrix_Sparse &o) | 
Copia desde "o".  Más... | |
| Matrix_Sparse & | move (Matrix_Sparse &o) | 
Traslada el valor de "o" a "*this".  Más... | |
| Matrix_Sparse & | swap (Matrix_Sparse &o) | 
Intercambia los valores de "*this" y "o".  Más... | |
| bool | equals (const Matrix_Sparse &o) const | 
| ¿¿¿ (*this==o) ???  Más... | |
| bool | same (const Matrix_Sparse &o) const | 
Retorna true si "o" comparte sus valores con "*this".  Más... | |
| reference | operator() (unsigned, unsigned) | 
| Retorna una referencia al elemento [i,j] de la matriz.  Más... | |
| const_reference | operator() (unsigned, unsigned) const | 
Retorna una referencia al elemento [i,j] de la matriz ( const ).  Más... | |
| void | reSize (unsigned, unsigned) | 
| Le cambia las dimensiones a la matriz.  Más... | |
| void | reShape (unsigned, unsigned) | 
| Le ajusta las dimensiones a la matriz.  Más... | |
| void | setDefault (const E &same) | 
Define el escalar que por defecto está en todas las entradas de la Matrix_Sparse.  Más... | |
| const E & | getDefault () | 
Valor almacenado en la mayor parte de la Matrix_Sparse.  Más... | |
| void | reserve (size_type _Count) | 
Ajusta la matriz para que pueda almacenar n valores diferentes a getDefault().  Más... | |
| void | reSize (unsigned newsize) | 
| Le cambia el tamaño máximo posible a la matriz.  Más... | |
| void | clear () | 
Borra todos los valores de la Matrix_Sparse.  Más... | |
Métodos privados | |
| void | add (const Matrix_Sparse &) | 
Le suma a "*this" la matriz "O".  Más... | |
| void | substract (const Matrix_Sparse &) | 
Le resta a "*this" la matriz "O".  Más... | |
| void | multiply (const Matrix_Sparse &, const Matrix_Sparse &) | 
Calcula la multiplicación  A * B  y la almacena en "*this".  Más... | |
Atributos privados | |
| unsigned * | m_I | 
Indice "i" de M(i,j) 0 <= i < m_capacity  Más... | |
| unsigned * | m_J | 
Indice "j" de M(i,j) 0 <= i < m_capacity  Más... | |
| E * | m_val | 
Valor para M(i,j) 0 <= i < m_capacity  Más... | |
| unsigned | m_size | 
| Cantidad de valores insertados en los 3 vectores paralelos.  Más... | |
| unsigned | m_capacity | 
| Tamaño de los 3 vectores paralelos.  Más... | |
| unsigned | m_rows | 
| Cantidad de filas de la matriz.  Más... | |
| unsigned | m_cols | 
| Cantidad de columnas de la matris.  Más... | |
| E | m_same | 
Valor almacenado en la mayor parte de la Matrix_Sparse.  Más... | |
Amigas | |
| template<class T > | |
| class | test_Matrix_Sparse | 
| Datos de prueba para la clase.  Más... | |
| bool | operator== (const Matrix_Sparse &p, const Matrix_Sparse &q) | 
| ¿¿¿ (p == q) ???  Más... | |
| bool | operator!= (const Matrix_Sparse &p, const Matrix_Sparse &q) | 
| ¿¿¿ (p != q) ???  Más... | |
| Matrix_Sparse | operator+ (const Matrix_Sparse &A, const Matrix_Sparse &B) | 
Retorna A+B.  Más... | |
| Matrix_Sparse | operator- (const Matrix_Sparse &A, const Matrix_Sparse &B) | 
Retorna A-B.  Más... | |
| Matrix_Sparse | operator* (const Matrix_Sparse &A, const Matrix_Sparse &B) | 
Retorna A*B.  Más... | |
| template<class T > | |
| bool | check_ok (const Matrix_Sparse< T > &M) | 
| Verifica la invariante de la clase.  Más... | |
Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala.
rows() x cols().reSize().E debe incluir un neutro para la adición, cuyo valor debe poderse obtener invocando el convertidor Matrix_Sparse<E>::value_type().Matrix_Sparse<E>::value_type y debe existir el valor Matrix_Sparse<E>::value_type(). Definición en la línea 33 del archivo Matrix_Sparse.h.
| typedef E Mx::Matrix_Sparse< E >::value_type | 
Tipo del objeto almacenado, similar al nombre usado en STL.
Definición en la línea 36 del archivo Matrix_Sparse.h.
| typedef value_type& Mx::Matrix_Sparse< E >::reference | 
Tipo del objeto almacenado, similar al nombre usado en STL.
Definición en la línea 38 del archivo Matrix_Sparse.h.
| typedef const value_type& Mx::Matrix_Sparse< E >::const_reference | 
Tipo del objeto almacenado, similar al nombre usado en STL.
Definición en la línea 40 del archivo Matrix_Sparse.h.
| typedef unsigned Mx::Matrix_Sparse< E >::size_type | 
Tipo del tamaño de un objeto, similar al nombre usado en STL.
Definición en la línea 42 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Constructor de vector.
 n * m  valores de la matriz."value_type" tiene un constructor de vector, lo usar para inicializar cada uno de los valores de la matriz; de lo contrario, los deja tal cual están en la memoria."value_type" es uno de los tipos escalares básicos, como lo son int o float, los valores almacenados en la matriz quedan tal cual están y no son inicializados.  m * n > 0  (m > 0) && (n > 0)  Definición en la línea 240 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Constructor de copia.
Definición en la línea 260 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Matriz escalar de valor V. 
Constructor a partir de Matrix_Sparse<E>::value_type(V).
"V" Definición en la línea 47 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Destructor.
Definición en la línea 282 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Cantidad de filas de la matriz.
Definición en la línea 50 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Cantidad de columnas de la Matriz.
Definición en la línea 51 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Cantidad de valores almacenados en la matriz.
Definición en la línea 52 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Cantidad de valores almacenados en la matriz.
Definición en la línea 53 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.
Definición en la línea 55 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Sinónimo de this->copy(o) 
Definición en la línea 57 del archivo Matrix_Sparse.h.
| Matrix_Sparse< E > & Mx::Matrix_Sparse< E >::copy | ( | const Matrix_Sparse< E > & | o | ) | 
Copia desde "o". 
"o" sobre "*this", de forma que el nuevo valor de "*this" sea un duplicado exacto del valor de "o"."*this" se pierde."o" mantiene su valor anterior."o" cambia, el de "*this" no cambiará, y viceversa, pues la copia es una copia profunda; no es superficial."*this" es "o" entonces su valor no cambia. *this == o .Definición en la línea 326 del archivo Matrix_Sparse.h.
| Matrix_Sparse< E > & Mx::Matrix_Sparse< E >::move | ( | Matrix_Sparse< E > & | o | ) | 
Traslada el valor de "o" a "*this". 
"*this" se pierde."*this" es el que "o" tuvo."o" queda en el estado en que lo dejaría Erase()."*this" es "o" entonces su valor no cambia.En general, después de esta operación casi nunca ocurre que  (*this == o) 
*this Definición en la línea 388 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Intercambia los valores de "*this" y "o". 
"*this" en lugar de una referencia, como ocurre con Matrix_Sparse::Child(), a veces swap() no tiene el resultado esperado por el programador.Por ejemplo, si se invoca  T.Child(i). swap( T.Child(j) )  el resultado no es intercambiar los hijos, sino más bien intercambiar los valores de los sub-árboles temporales T.Child(i) y T.Child(j). La forma correcta de intercambiar hijos es usar Graft().
1 )Definición en la línea 427 del archivo Matrix_Sparse.h.
| bool Mx::Matrix_Sparse< E >::equals | ( | const Matrix_Sparse< E > & | o | ) | const | 
¿¿¿ (*this==o) ???
Definición en la línea 291 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Retorna true si "o" comparte sus valores con "*this". 
Definición en la línea 68 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Le suma a "*this" la matriz "O". 
Definición en la línea 702 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Le resta a "*this" la matriz "O". 
Definición en la línea 736 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Calcula la multiplicación  A * B  y la almacena en "*this". 
"A" y "B" deben tener dimensiones compatibles A.cols() == B.rows() "A" debe ser igual a la cantidad de columnas de "B"  A.cols() * B.cols() * A.cols() * A.capacity() * B.capacity()  )Definición en la línea 775 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Retorna una referencia al elemento [i,j] de la matriz.
M(i,j) significa lo que en arreglos se denota con M[i][j].M(i,j) = val; // M(i,j) es un "lvalue" (modificable) Definición en la línea 623 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Retorna una referencia al elemento [i,j] de la matriz ( const ). 
M(i,j) significa lo que en arreglos se denota con M[i][j].val = M(i,j); // M(i,j) es un "rvalue" (const) Definición en la línea 561 del archivo Matrix_Sparse.h.
| void Mx::Matrix_Sparse< E >::reSize | ( | unsigned | m, | 
| unsigned | n | ||
| ) | 
Le cambia las dimensiones a la matriz.
Matrix_Sparse<E>::value_type().  (m > 0) && (n > 0)  Definición en la línea 445 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Le ajusta las dimensiones a la matriz.
 (m*n) == rows()*cols()  hace lo mismo que haría reSize(m,n).Definición en la línea 551 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Define el escalar que por defecto está en todas las entradas de la Matrix_Sparse. 
same != getDefault() la matriz queda vacía.Definición en la línea 212 del archivo Matrix_Sparse.h.
      
  | 
  inline | 
Valor almacenado en la mayor parte de la Matrix_Sparse. 
Definición en la línea 89 del archivo Matrix_Sparse.h.
| void Mx::Matrix_Sparse< E >::reserve | ( | size_type | _Count | ) | 
Ajusta la matriz para que pueda almacenar n valores diferentes a getDefault(). 
| void Mx::Matrix_Sparse< E >::reSize | ( | unsigned | newsize | ) | 
Le cambia el tamaño máximo posible a la matriz.
getDefault().size() < newsize. Definición en la línea 662 del archivo Matrix_Sparse.h.
| void Mx::Matrix_Sparse< E >::clear | ( | ) | 
Borra todos los valores de la Matrix_Sparse. 
      
  | 
  friend | 
Datos de prueba para la clase.
Definición en la línea 96 del archivo Matrix_Sparse.h.
      
  | 
  friend | 
¿¿¿ (p == q) ???
Definición en la línea 63 del archivo Matrix_Sparse.h.
      
  | 
  friend | 
¿¿¿ (p != q) ???
Definición en la línea 65 del archivo Matrix_Sparse.h.
      
  | 
  friend | 
Retorna A+B. 
Definición en la línea 74 del archivo Matrix_Sparse.h.
      
  | 
  friend | 
Retorna A-B. 
Definición en la línea 76 del archivo Matrix_Sparse.h.
      
  | 
  friend | 
Retorna A*B. 
Definición en la línea 78 del archivo Matrix_Sparse.h.
Verifica la invariante de la clase.
- El campo \c m_same indica cuál es el valor que se repite más en toda la matriz. - Usualmente \c same es el neutro aditivo \c value_type(). - No existe un constructor explícito para darle a \c m_same su valor inicial, que es siempre inicializado en \c value_type(). Para cambiarlo es necesario invocar el método \c setgetDefault(). - Los vectores \c m_I[], \c m_J[] y \c m_val[] son vectores paralelos, todos de longitud \c Matrix_Sparse::m_capacity. - La cantidad máxima de valores diferente que pueden ser almacenados en la matriz es \c Matrix_Sparse::m_capacity. - El largo de estos vectores aumenta cuando se hace referencia a un valor M(i,j) mediante la versión que no es \c const del \c operator()(i,j). O sea, que es ese método el encargado de agregar valores en \c m_val[], pues el operador homónimo \c const operator()(i,j) nunca agrega nada y, como es \c const, en general retorna una referencia constante a \c m_same. - Es posible que la matriz tenga dimensiones nulas, lo que implica que todos los punteros a los vectors paralelos deben ser nulos. Este hecho se marca dándolo el valor \c 0 (cero) al campo \c m_capacity. - En todos los algoritmos, "m" o "m_rows" es la cantidad de filas == \c rows() - En todos los algoritmos, "n" o "m_cols" es la cantidad de columnas == \c cols() \par <em>Rep</em> Modelo de la clase
Ok() (m_capacity == 0) <==> (m_I == 0)(m_capacity == 0) <==> (m_J == 0)(m_capacity == 0) <==> (m_val == 0)(m_rows == 0) ==> (m_capacity == 0)(m_cols == 0) ==> (m_capacity == 0)(m_capacity != 0) <==> (m_I != 0)(m_capacity != 0) <==> (m_J != 0)(m_capacity != 0) <==> (m_val != 0)(m_rows == 0) <==> (m_cols == 0)( m_size <= m_capacity )check_ok (m_same)( (0<=m_I[k]) && (m_I[k] < m_rows) ) k = [0..m_size-1]( (0<=m_J[k]) && (m_J[k] < m_cols) ) k = [0..m_size-1]check_ok( m_val[k] ) Definición en la línea 149 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Indice "i" de M(i,j) 0 <= i < m_capacity 
Definición en la línea 98 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Indice "j" de M(i,j) 0 <= i < m_capacity 
Definición en la línea 99 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Valor para M(i,j) 0 <= i < m_capacity 
Definición en la línea 100 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Cantidad de valores insertados en los 3 vectores paralelos.
Definición en la línea 101 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Tamaño de los 3 vectores paralelos.
Definición en la línea 102 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Cantidad de filas de la matriz.
Definición en la línea 103 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Cantidad de columnas de la matris.
Definición en la línea 104 del archivo Matrix_Sparse.h.
      
  | 
  private | 
Valor almacenado en la mayor parte de la Matrix_Sparse. 
Definición en la línea 105 del archivo Matrix_Sparse.h.
 1.8.5