Uso de Mx::Matrix:
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Amigas 'defines'
Tipos públicos | Métodos públicos | Métodos privados | Atributos privados | Amigas | Lista de todos los miembros
Referencia de la plantilla de la Clase Mx::Matrix_Sparse< E >

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_typereference
 Tipo del objeto almacenado, similar al nombre usado en STL. Más...
 
typedef const value_typeconst_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_Sparseoperator= (const Matrix_Sparse &o)
 Sinónimo de this->copy(o) Más...
 
Matrix_Sparsecopy (const Matrix_Sparse &o)
 Copia desde "o". Más...
 
Matrix_Sparsemove (Matrix_Sparse &o)
 Traslada el valor de "o" a "*this". Más...
 
Matrix_Sparseswap (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...
 
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...
 

Descripción detallada

template<class E>
class Mx::Matrix_Sparse< E >

Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala.

Definición en la línea 33 del archivo Matrix_Sparse.h.

Documentación de los 'Typedef' miembros de la clase

template<class E>
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.

template<class E>
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.

template<class E>
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.

template<class E>
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.

Documentación del constructor y destructor

template<class E >
Mx::Matrix_Sparse< E >::Matrix_Sparse ( unsigned  m = 1,
unsigned  n = 1 
)
inline

Constructor de vector.

  • Obtiene suficiente memoria dinámica para almacenas los n * m valores de la matriz.
  • Si "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.
  • Si "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.
    Precondición
    • m * n > 0
    • (m > 0) && (n > 0)

Definición en la línea 240 del archivo Matrix_Sparse.h.

template<class E >
Mx::Matrix_Sparse< E >::Matrix_Sparse ( const Matrix_Sparse< E > &  o)
inline

Constructor de copia.

Definición en la línea 260 del archivo Matrix_Sparse.h.

template<class E>
template< class E > inline Mx::Matrix_Sparse< E >::Matrix_Sparse ( const value_type  V)
inline

Matriz escalar de valor V.

Constructor a partir de Matrix_Sparse<E>::value_type(V).

  • La matriz resultante es una matriz escalar, de dimensiones 1x1, y su valor es "V"

Definición en la línea 47 del archivo Matrix_Sparse.h.

template<class E >
Mx::Matrix_Sparse< E >::~Matrix_Sparse ( )
inline

Destructor.

Definición en la línea 282 del archivo Matrix_Sparse.h.

Documentación de las funciones miembro

template<class E>
unsigned Mx::Matrix_Sparse< E >::rows ( ) const
inline

Cantidad de filas de la matriz.

Definición en la línea 50 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::cols ( ) const
inline

Cantidad de columnas de la Matriz.

Definición en la línea 51 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::size ( ) const
inline

Cantidad de valores almacenados en la matriz.

Definición en la línea 52 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::count ( ) const
inline

Cantidad de valores almacenados en la matriz.

Definición en la línea 53 del archivo Matrix_Sparse.h.

template<class E>
size_type Mx::Matrix_Sparse< E >::capacity ( ) const
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.

template<class E>
Matrix_Sparse& Mx::Matrix_Sparse< E >::operator= ( const Matrix_Sparse< E > &  o)
inline

Sinónimo de this->copy(o)

Definición en la línea 57 del archivo Matrix_Sparse.h.

template<class E >
Matrix_Sparse< E > & Mx::Matrix_Sparse< E >::copy ( const Matrix_Sparse< E > &  o)

Copia desde "o".

  • Copia todo el valor de "o" sobre "*this", de forma que el nuevo valor de "*this" sea un duplicado exacto del valor de "o".
  • El valor anterior de "*this" se pierde.
  • El objeto "o" mantiene su valor anterior.
  • Luego de la copia, cuando el valor de "o" cambia, el de "*this" no cambiará, y viceversa, pues la copia es una copia profunda; no es superficial.
  • Si "*this" es "o" entonces su valor no cambia.
  • Después de esta operación siempre ocurre que *this == o .
Complejidad:
O( rows() * cols() )
Devuelve
*this
Ver también
http://www.di-mare.com/adolfo/binder/c04.htm#sc05

Definición en la línea 326 del archivo Matrix_Sparse.h.

template<class E >
Matrix_Sparse< E > & Mx::Matrix_Sparse< E >::move ( Matrix_Sparse< E > &  o)

Traslada el valor de "o" a "*this".

  • El valor anterior de "*this" se pierde.
  • El nuevo valor de "*this" es el que "o" tuvo.
  • "o" queda en el estado en que lo dejaría Erase().
  • Si "*this" es "o" entonces su valor no cambia.
  • En general, después de esta operación casi nunca ocurre que (*this == o)

    Complejidad:
    O( rows() * cols() )
    Devuelve
    *this
    Ver también
    http://www.di-mare.com/adolfo/binder/c04.htm#sc07

Definición en la línea 388 del archivo Matrix_Sparse.h.

template<class E >
Matrix_Sparse< E > & Mx::Matrix_Sparse< E >::swap ( Matrix_Sparse< E > &  o)
inline

Intercambia los valores de "*this" y "o".

  • Debido a que algunos métodos retornan copias del valor de "*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().

    Complejidad:
    O( 1 )
    Devuelve
    *this
    Ver también
    http://www.di-mare.com/adolfo/binder/c04.htm#sc08

Definición en la línea 427 del archivo Matrix_Sparse.h.

template<class E >
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.

template<class E>
bool Mx::Matrix_Sparse< E >::same ( const Matrix_Sparse< E > &  o) const
inline

Retorna true si "o" comparte sus valores con "*this".

Definición en la línea 68 del archivo Matrix_Sparse.h.

template<class E >
void Mx::Matrix_Sparse< E >::add ( const Matrix_Sparse< E > &  O)
private

Le suma a "*this" la matriz "O".

Precondición
  • "*this" y "O" deben tener las mismas dimensiones
  • rows() == O.rows() && cols() == O.cols()
Complejidad:
O( rows() * cols() )
Comentarios
  • Esta es la implementación de Matrix_Sparse<E> operator+( Matrix_Sparse<E>&, Matrix_Sparse<E> )
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe este método que realiza el trabajo, aunque es poco cómodo de usar.

Definición en la línea 702 del archivo Matrix_Sparse.h.

template<class E >
void Mx::Matrix_Sparse< E >::substract ( const Matrix_Sparse< E > &  O)
private

Le resta a "*this" la matriz "O".

Precondición
  • "*this" y "O" deben tener las mismas dimensiones
  • rows() == O.rows() && cols() == O.cols()
Complejidad:
O( rows() * cols() )
Comentarios
  • Esta es la implementación de Matrix_Sparse<E> operator-( Matrix_Sparse<E>&, Matrix_Sparse<E> )
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe este método que realiza el trabajo, aunque es poco cómodo de usar.

Definición en la línea 736 del archivo Matrix_Sparse.h.

template<class E >
void Mx::Matrix_Sparse< E >::multiply ( const Matrix_Sparse< E > &  A,
const Matrix_Sparse< E > &  B 
)
private

Calcula la multiplicación A * B y la almacena en "*this".

  • Las dimensiones de "*this" se ajustan de manera que:
Precondición
  • "A" y "B" deben tener dimensiones compatibles
  • A.cols() == B.rows()
  • La multiplicación se hace [Fila x Columna], lo que implica que la cantidad de valores en la filas de "A" debe ser igual a la cantidad de columnas de "B"
Complejidad:
O( A.cols() * B.cols() * A.cols() * A.capacity() * B.capacity() )
Comentarios
  • Esta es la implementación de Matrix_Sparse<E> operator*( Matrix_Sparse<E>&, Matrix_Sparse<E> )
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe este método que realiza el trabajo, aunque es poco cómodo de usar.

Definición en la línea 775 del archivo Matrix_Sparse.h.

template<class E >
E & Mx::Matrix_Sparse< E >::operator() ( unsigned  i,
unsigned  j 
)
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.

template<class E >
const E & Mx::Matrix_Sparse< E >::operator() ( unsigned  i,
unsigned  j 
) const
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.

template<class E >
void Mx::Matrix_Sparse< E >::reSize ( unsigned  m,
unsigned  n 
)

Le cambia las dimensiones a la matriz.

Definición en la línea 445 del archivo Matrix_Sparse.h.

template<class E >
void Mx::Matrix_Sparse< E >::reShape ( unsigned  m,
unsigned  n 
)
inline

Le ajusta las dimensiones a la matriz.

  • Si ocurre que (m*n) == rows()*cols() hace lo mismo que haría reSize(m,n).
  • En caso contrario, no hace nada.

Definición en la línea 551 del archivo Matrix_Sparse.h.

template<class E >
void Mx::Matrix_Sparse< E >::setDefault ( const E &  same)
inline

Define el escalar que por defecto está en todas las entradas de la Matrix_Sparse.

  • Si same != getDefault() la matriz queda vacía.
  • De lo contrario, nada ocurre.

Definición en la línea 212 del archivo Matrix_Sparse.h.

template<class E>
const E& Mx::Matrix_Sparse< E >::getDefault ( )
inline

Valor almacenado en la mayor parte de la Matrix_Sparse.

Definición en la línea 89 del archivo Matrix_Sparse.h.

template<class E>
void Mx::Matrix_Sparse< E >::reserve ( size_type  _Count)

Ajusta la matriz para que pueda almacenar n valores diferentes a getDefault().

template<class E >
void Mx::Matrix_Sparse< E >::reSize ( unsigned  newsize)

Le cambia el tamaño máximo posible a la matriz.

  • Le aumenta la cantidad de valores diferentes a getDefault().
  • No hace nada cuando size() < newsize.

Definición en la línea 662 del archivo Matrix_Sparse.h.

template<class E>
void Mx::Matrix_Sparse< E >::clear ( )

Borra todos los valores de la Matrix_Sparse.

Documentación de las funciones relacionadas y clases amigas

template<class E>
template<class T >
friend class test_Matrix_Sparse
friend

Datos de prueba para la clase.

Definición en la línea 96 del archivo Matrix_Sparse.h.

template<class E>
bool operator== ( const Matrix_Sparse< E > &  p,
const Matrix_Sparse< E > &  q 
)
friend

¿¿¿ (p == q) ???

Definición en la línea 63 del archivo Matrix_Sparse.h.

template<class E>
bool operator!= ( const Matrix_Sparse< E > &  p,
const Matrix_Sparse< E > &  q 
)
friend

¿¿¿ (p != q) ???

Definición en la línea 65 del archivo Matrix_Sparse.h.

template<class E>
Matrix_Sparse operator+ ( const Matrix_Sparse< E > &  A,
const Matrix_Sparse< E > &  B 
)
friend

Retorna A+B.

Definición en la línea 74 del archivo Matrix_Sparse.h.

template<class E>
Matrix_Sparse operator- ( const Matrix_Sparse< E > &  A,
const Matrix_Sparse< E > &  B 
)
friend

Retorna A-B.

Definición en la línea 76 del archivo Matrix_Sparse.h.

template<class E>
Matrix_Sparse operator* ( const Matrix_Sparse< E > &  A,
const Matrix_Sparse< E > &  B 
)
friend

Retorna A*B.

Definición en la línea 78 del archivo Matrix_Sparse.h.

template<class E>
template<class T >
bool check_ok ( const Matrix_Sparse< T > &  M)
friend

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
____________________________________
+---+---+---+---+---+---+-..-+---+---+ 0 1 2 3 4 5 6
m_I--->| 1 | 3 | 3 |'-'| ... ... |'-'| 0 / - - - - - - - \
+---+---+---+---+ ... ... +---+ 1 | - a - - - - - |
m_J--->| 1 | 2 | 1 |'-'| ... ... |'-'| 2 | - - - - - - - |
+---+---+---+---+ ... ... +---+ 3 | - c b - - - - |
m_val-->|'a'|'b'|'c'|'-'| ... ... |'-'| 4 \ - - - - - - - /
+---+---+---+---+---+---+-..-+---+---+
0 1 2 |
m_size--------+ == 3 m_same == '-' m_rows == 5 m_cols == 7
  • Invariante: (m_capacity == 0) <==> (m_I == 0)
  • Invariante: (m_capacity == 0) <==> (m_J == 0)
  • Invariante: (m_capacity == 0) <==> (m_val == 0)
  • Invariante: (m_rows == 0) ==> (m_capacity == 0)
  • Invariante: (m_cols == 0) ==> (m_capacity == 0)
  • Invariante: (m_capacity != 0) <==> (m_I != 0)
  • Invariante: (m_capacity != 0) <==> (m_J != 0)
  • Invariante: (m_capacity != 0) <==> (m_val != 0)
  • Invariante: (m_rows == 0) <==> (m_cols == 0)
  • Invariante: ( m_size <= m_capacity )
  • Invariante: check_ok (m_same)
  • Invariante: ( (0<=m_I[k]) && (m_I[k] < m_rows) ) k = [0..m_size-1]
  • Invariante: ( (0<=m_J[k]) && (m_J[k] < m_cols) ) k = [0..m_size-1]
  • Invariante: check_ok( m_val[k] )

Definición en la línea 149 del archivo Matrix_Sparse.h.

Documentación de los datos miembro

template<class E>
unsigned* Mx::Matrix_Sparse< E >::m_I
private

Indice "i" de M(i,j) 0 <= i < m_capacity

Definición en la línea 98 del archivo Matrix_Sparse.h.

template<class E>
unsigned* Mx::Matrix_Sparse< E >::m_J
private

Indice "j" de M(i,j) 0 <= i < m_capacity

Definición en la línea 99 del archivo Matrix_Sparse.h.

template<class E>
E* Mx::Matrix_Sparse< E >::m_val
private

Valor para M(i,j) 0 <= i < m_capacity

Definición en la línea 100 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::m_size
private

Cantidad de valores insertados en los 3 vectores paralelos.

Definición en la línea 101 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::m_capacity
private

Tamaño de los 3 vectores paralelos.

Definición en la línea 102 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::m_rows
private

Cantidad de filas de la matriz.

Definición en la línea 103 del archivo Matrix_Sparse.h.

template<class E>
unsigned Mx::Matrix_Sparse< E >::m_cols
private

Cantidad de columnas de la matris.

Definición en la línea 104 del archivo Matrix_Sparse.h.

template<class E>
E Mx::Matrix_Sparse< E >::m_same
private

Valor almacenado en la mayor parte de la Matrix_Sparse.

Definición en la línea 105 del archivo Matrix_Sparse.h.


La documentación para esta clase fue generada a partir del siguiente fichero: