La Matriz Abstracta no Polimorfica:
|
Matriz muy chirrisquitica almacenada como matriz rala implementada con listas. Más...
#include <Matrix_List.h>
Tipos públicos | |
typedef E | value_type |
Tipo del objeto almacenado, similar al nombre usado en STL. | |
typedef value_type & | reference |
Referencia al objeto almacenado, similar al nombre usado en STL. | |
typedef const value_type & | const_reference |
Referencia constante al objeto almacenado, similar al nombre usado en STL. | |
Métodos públicos | |
Matrix_List (unsigned m=1, unsigned n=1) | |
Constructor de vector. | |
Matrix_List (const Matrix_List &o) | |
Constructor de copia. | |
Matrix_List (const E &V) | |
Constructor escalar. | |
~Matrix_List () | |
Destructor. | |
unsigned | rows () const |
Cantidad de filas de la matriz. | |
unsigned | cols () const |
Cantidad de columnas de la matriz. | |
unsigned | size () const |
Cantidad de valores almacenados en la matriz. | |
unsigned | count () const |
Sinónimo de size() . | |
unsigned | capacity () const |
Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz. | |
Matrix_List & | operator= (const Matrix_List &o) |
Matrix_List & | copy (const Matrix_List &o) |
Copia desde "M" . | |
Matrix_List & | move (Matrix_List &o) |
Traslada el valor de "M" a "*this" . | |
Matrix_List & | swap (Matrix_List &o) |
Intercambia los valores de "*this" y "M" . | |
void | clear () |
Deja el valor de "*this" en el valor en que lo inicializa el constructor de vector. | |
bool | equals (const Matrix_List &o) const |
¿¿¿ A == B ??? | |
E & | operator() (unsigned, unsigned) |
Retorna una referencia al elemento [i][j] de la matriz. | |
const E & | operator() (unsigned, unsigned) const |
Retorna una referencia constante al elemento [i][j] de la matriz [CONST]. | |
E & | at (unsigned i, unsigned j) |
Retorna una referencia al elemento [i][j] de la matriz. | |
const E & | at (unsigned i, unsigned j) const |
Retorna una referencia constante al elemento [i][j] de la matriz [CONST]. | |
void | reShape (unsigned m, unsigned n) |
Le ajusta las dimensiones a la matriz. | |
void | reSize (unsigned m, unsigned n) |
Le cambia las dimensiones a la matriz. | |
void | transpose () |
Transforma la matriz en su transpuesta. | |
void | setDefault (const E &same) |
Define cuál es el valor almacenado en la mayor parte de la matriz. | |
const E & | getDefault () |
Valor almacenado en la mayor parte de la matriz. | |
bool | same (const Matrix_BASE &M) const |
Retorna true si "M" comparte su valor con "*this" . | |
Métodos protegidos | |
Matrix_BASE & | copy (const Matrix_BASE &M) |
Copia desde "M" . | |
Matrix_BASE & | move (Matrix_BASE &M) |
Traslada el valor de "M" a "*this" . | |
Matrix_BASE & | swap (Matrix_BASE &M) |
Intercambia los valores de "*this" y "M" . | |
bool | equals (const Matrix_BASE &M) const |
¿¿¿ A == B ??? | |
Métodos privados | |
void | reserve (unsigned n) |
Ajusta la matriz para que pueda almacenar al menos valores diferentes a getDefault() . | |
void | reSize (unsigned newsize) |
Atributos privados | |
std::vector< std::list < Matrix_List_ColVal< E > > > | m_VL |
Vector en donde están almacenados los valores de la lista de columnas. | |
unsigned | m_cols |
Cantidad de columnas de la matriz. | |
E | m_same |
Valor almacenado en la mayor parte de la Matrix_List . | |
Amigas | |
class | test_Matrix |
BUnit test. | |
template<class T > | |
bool | check_ok (const Matrix_List< T > &M) |
Verificación genérica de la invariante de la clase check_ok() . | |
template<class MAT > | |
bool | check_ok_Matrix (const MAT &M) |
Verificación genérica de la invariante de la clase check_ok() . | |
template<class MAT > | |
bool | check_ok_Matrix (const MAT &M) |
Verificación genérica de la invariante de la clase check_ok() . | |
template<class MAT > | |
MAT | operator+ (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B) |
A+B | |
template<class MAT > | |
MAT | operator- (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B) |
A-B | |
template<class MAT > | |
MAT | operator* (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B) |
Res=A*B | |
template<class MAT > | |
bool | operator== (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B) |
¿¿¿ (A == B) ??? | |
template<class MAT > | |
bool | operator!= (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B) |
¿¿¿ (A != B) ??? | |
template<class MAT > | |
unsigned | count_Matrix (const MAT &M) |
Implementación por defecto para Matrix_BASE<E>::count() | |
template<class MAT > | |
void | clear_Matrix (MAT &M) |
Implementación por defecto para Matrix_BASE<E>::clear() | |
template<class MAT > | |
bool | equals_Matrix (const MAT &A, const MAT &B) |
Implementación por defecto para Matrix_BASE<E>::operator==() | |
template<class MAT > | |
void | add_Matrix (MAT &Res, const MAT &M) |
Implementación por defecto para operator+( Matrix_BASE<E>&, Matrix_BASE<E> ) | |
template<class MAT > | |
void | substract_Matrix (MAT &Res, const MAT &M) |
Implementación por defecto para operator-( Matrix_BASE<E>&, Matrix_BASE<E> ) | |
template<class MAT > | |
void | multiply_Matrix (MAT &Res, const MAT &A, const MAT &B) |
Calcula la multiplicación A * B y almacena el resultado en "Res" . | |
template<class MAT > | |
MAT::reference | at_Matrix (MAT &M, unsigned i, unsigned j) |
Implementación por defecto para Matrix_BASE<E>::at() | |
template<class MAT > | |
MAT::const_reference | at_Matrix (const MAT &M, unsigned i, unsigned j) |
Implementación por defecto para Matrix_BASE<E>::at() const . |
Matriz muy chirrisquitica almacenada como matriz rala implementada con listas.
n * m
valores de la matriz."value_type"
es uno de los tipos escalares básicos, como lo son int
o float
, los valores almacenados en la matriz no son inicializados en cero."m"
o "n"
es cero, la matriz queda vacía. Definición en la línea 69 del archivo Matrix_List.h.
Mx::Matrix_BASE< E >::value_type [inherited] |
Tipo del objeto almacenado, similar al nombre usado en STL.
Definición en la línea 47 del archivo Matrix_BASE.h.
Mx::Matrix_BASE< E >::reference [inherited] |
Referencia al objeto almacenado, similar al nombre usado en STL.
Definición en la línea 48 del archivo Matrix_BASE.h.
Mx::Matrix_BASE< E >::const_reference [inherited] |
Referencia constante al objeto almacenado, similar al nombre usado en STL.
Definición en la línea 49 del archivo Matrix_BASE.h.
Mx::Matrix_List< E >::Matrix_List | ( | unsigned | m = 1 , |
unsigned | n = 1 |
||
) |
Constructor de vector.
n * m
valores de la matriz."value_type"
es uno de los tipos escalares básicos, como lo son int
o float
, los valores almacenados en la matriz no son inicializados en cero."m"
o "n"
es cero, la matriz queda vacía. Definición en la línea 221 del archivo Matrix_List.h.
Mx::Matrix_List< E >::Matrix_List | ( | const Matrix_List< E > & | o | ) | [inline] |
Constructor de copia.
Definición en la línea 235 del archivo Matrix_List.h.
Mx::Matrix_List< E >::Matrix_List | ( | const E & | V | ) | [inline] |
Constructor escalar.
"V"
. Definición en la línea 74 del archivo Matrix_List.h.
Mx::Matrix_List< E >::~Matrix_List | ( | ) | [inline] |
Destructor.
Definición en la línea 241 del archivo Matrix_List.h.
unsigned Mx::Matrix_List< E >::rows | ( | ) | const [inline] |
Cantidad de filas de la matriz.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 79 del archivo Matrix_List.h.
unsigned Mx::Matrix_List< E >::cols | ( | ) | const [inline] |
Cantidad de columnas de la matriz.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 80 del archivo Matrix_List.h.
unsigned Mx::Matrix_List< E >::size | ( | ) | const [inline] |
Cantidad de valores almacenados en la matriz.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 81 del archivo Matrix_List.h.
unsigned Mx::Matrix_List< E >::count | ( | ) | const [inline] |
Sinónimo de size()
.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 82 del archivo Matrix_List.h.
unsigned Mx::Matrix_List< E >::capacity | ( | ) | const [inline] |
Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 83 del archivo Matrix_List.h.
Matrix_List& Mx::Matrix_List< E >::operator= | ( | const Matrix_List< E > & | o | ) | [inline] |
Definición en la línea 85 del archivo Matrix_List.h.
Matrix_List< E > & Mx::Matrix_List< E >::copy | ( | const Matrix_List< E > & | o | ) |
Copia desde "M"
.
"M"
sobre "*this"
de forma que el nuevo valor de "*this"
sea un duplicado exacto del valor de "M"
."*this"
se pierde."M"
mantiene su valor."M"
cambia, el de "*this"
no cambiará, y viceversa, pues la copia es una copia profunda; no es superficial."*this"
es "M"
su valor no cambia. *this == M
."*this"
Definición en la línea 251 del archivo Matrix_List.h.
Matrix_List< E > & Mx::Matrix_List< E >::move | ( | Matrix_List< E > & | o | ) |
Traslada el valor de "M"
a "*this"
.
"*this"
se pierde"*this"
es el que "M"
tuvo"M"
queda en el estado en que queda cualquier objeto cuando es inicializardo con el constructor de vector."*this"
es "M"
entonces su valor no cambia (*this == M)
"*this"
Definición en la línea 263 del archivo Matrix_List.h.
Matrix_List< E > & Mx::Matrix_List< E >::swap | ( | Matrix_List< E > & | o | ) |
Intercambia los valores de "*this"
y "M"
.
"*this"
Definición en la línea 283 del archivo Matrix_List.h.
void Mx::Matrix_List< E >::clear | ( | ) |
Deja el valor de "*this"
en el valor en que lo inicializa el constructor de vector.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 292 del archivo Matrix_List.h.
bool Mx::Matrix_List< E >::equals | ( | const Matrix_List< E > & | o | ) | const [inline] |
¿¿¿ A == B ???
Definición en la línea 245 del archivo Matrix_List.h.
E & Mx::Matrix_List< 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 es M
[i][j].M(i,j) = val; // M(i,j) es un "lvalue" (modificable)
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 393 del archivo Matrix_List.h.
const E & Mx::Matrix_List< E >::operator() | ( | unsigned | i, |
unsigned | j | ||
) | const [inline] |
Retorna una referencia constante al elemento [i][j] de la matriz [CONST].
M(i,j)
significa lo que en arreglos es M
[i][j].val = M(i,j); // M(i,j) es un "rvalue" (const)
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 347 del archivo Matrix_List.h.
E& Mx::Matrix_List< E >::at | ( | unsigned | i, |
unsigned | j | ||
) | [inline] |
Retorna una referencia al elemento [i][j] de la matriz.
[i][j].
[i][j] está fuera de rango levanta una excepción de tipo std::out_of_range
.M.at(i,j) = val; // M.at(i,j) es un "lvalue" (modificable)
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 95 del archivo Matrix_List.h.
const E& Mx::Matrix_List< E >::at | ( | unsigned | i, |
unsigned | j | ||
) | const [inline] |
Retorna una referencia constante al elemento [i][j] de la matriz [CONST].
[i][j].
[i][j] está fuera de rango levanta una excepción de tipo std::out_of_range
.val = M.at(i,j); // M.at(i,j) es un "rvalue" (const)
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 96 del archivo Matrix_List.h.
void Mx::Matrix_List< E >::reShape | ( | unsigned | m, |
unsigned | n | ||
) |
Le ajusta las dimensiones a la matriz.
reSize(m,n)
.Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 339 del archivo Matrix_List.h.
void Mx::Matrix_List< E >::reSize | ( | unsigned | m, |
unsigned | n | ||
) |
Le cambia las dimensiones a la matriz.
(m*n == 0)
deja la matriz vacía. Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 301 del archivo Matrix_List.h.
void Mx::Matrix_List< E >::transpose | ( | ) |
Transforma la matriz en su transpuesta.
Reimplementado de Mx::Matrix_BASE< E >.
void Mx::Matrix_List< E >::setDefault | ( | const E & | same | ) | [inline] |
Define cuál es el valor almacenado en la mayor parte de la matriz.
same
.same != getDefault()
la matriz queda reducida como si hubiera sido invocado clear()
. Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 421 del archivo Matrix_List.h.
const E & Mx::Matrix_List< E >::getDefault | ( | ) | [inline] |
Valor almacenado en la mayor parte de la matriz.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 415 del archivo Matrix_List.h.
Mx::Matrix_List< E >::reserve | ( | unsigned | n | ) | [private] |
Ajusta la matriz para que pueda almacenar al menos
valores diferentes a getDefault()
.
void Mx::Matrix_List< E >::reSize | ( | unsigned | newsize | ) | [private] |
Matrix_BASE< E > & Mx::Matrix_BASE< E >::copy | ( | const Matrix_BASE< E > & | M | ) | [protected, inherited] |
Copia desde "M"
.
"M"
sobre "*this"
de forma que el nuevo valor de "*this"
sea un duplicado exacto del valor de "M"
."*this"
se pierde."M"
mantiene su valor."M"
cambia, el de "*this"
no cambiará, y viceversa, pues la copia es una copia profunda; no es superficial."*this"
es "M"
su valor no cambia. *this == M
."*this"
Matrix_BASE< E > & Mx::Matrix_BASE< E >::move | ( | Matrix_BASE< E > & | M | ) | [protected, inherited] |
Traslada el valor de "M"
a "*this"
.
"*this"
se pierde"*this"
es el que "M"
tuvo"M"
queda en el estado en que queda cualquier objeto cuando es inicializardo con el constructor de vector."*this"
es "M"
entonces su valor no cambia (*this == M)
"*this"
Matrix_BASE< E > & Mx::Matrix_BASE< E >::swap | ( | Matrix_BASE< E > & | M | ) | [protected, inherited] |
Intercambia los valores de "*this"
y "M"
.
"*this"
bool Mx::Matrix_BASE< E >::same | ( | const Matrix_BASE< E > & | M | ) | const [inline, inherited] |
Retorna true
si "M"
comparte su valor con "*this"
.
Definición en la línea 68 del archivo Matrix_BASE.h.
bool Mx::Matrix_BASE< E >::equals | ( | const Matrix_BASE< E > & | M | ) | const [protected, inherited] |
¿¿¿ A == B ???
friend class test_Matrix [friend] |
BUnit test.
Reimplementado de Mx::Matrix_BASE< E >.
Definición en la línea 106 del archivo Matrix_List.h.
Verificación genérica de la invariante de la clase check_ok()
.
Ok()
- El campo \c m_same indica cuál es el valor que se repite más en toda la matriz. - Usualmente \c m_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(). - El vector \c m_VL[] contiene las listas de valores almacenados en la matriz. Cualquiera de estas listas puede estar vacía; aún todas pueden ser listas vacías. - La cantidad de columnas de la matriz es el valor fijo es \c m_cols. - El largo de las listas de valores cambia 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_VL[], 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 el vector \c m_VL[] está vacío. - No hace falta alacenar la cantidad de valores de la matriz porque se siempre es \c m_VL.size(). el valor \c 0 (cero) al campo \c m_capacity. \par <em>Rep</em> Modelo de la clase
m_VL<list<>> _______ +---+ / \ 0 | *-|---| 1 , 'a' | +---+ \_______/ 0 1 2 3 4 5 6 1 | ? | M(0,1)=='a' 0 / - a - - - - - \ +---+ 1 | - - - - - - - | 2 | ? | _______ _______ 2 | - - - - - - - | +---+ / \ / \ 3 | - c - - - b - | 3 | *-|---| 5 , 'b' |---| 1 , 'c' | 4 \ - - - - - - - / +---+ \_______/ \_______/ 4 | ? | M(3,5)=='b' M(3,1)=='c' +---+ m_same == '-' rows() == m_VL.size() m_cols == 7
Ok()
(m_cols == 0) <==> (m_VL.empty())
check_ok( M.m_same )
Definición en la línea 187 del archivo Matrix_List.h.
Verificación genérica de la invariante de la clase check_ok()
.
Ok()
&M != 0
.(M.rows() == 0) <==> (M.cols() == 0)
check_ok( M(i,j) )
Definición en la línea 140 del archivo Matrix_BASE.h.
Verificación genérica de la invariante de la clase check_ok()
.
Ok()
&M != 0
.(M.rows() == 0) <==> (M.cols() == 0)
check_ok( M(i,j) )
Definición en la línea 140 del archivo Matrix_BASE.h.
MAT operator+ | ( | const Matrix_BASE< typename MAT::value_type > & | A, |
const MAT & | B | ||
) | [friend, inherited] |
A+B
Definición en la línea 368 del archivo Matrix_BASE.h.
MAT operator- | ( | const Matrix_BASE< typename MAT::value_type > & | A, |
const MAT & | B | ||
) | [friend, inherited] |
A-B
Definición en la línea 448 del archivo Matrix_BASE.h.
MAT operator* | ( | const Matrix_BASE< typename MAT::value_type > & | A, |
const MAT & | B | ||
) | [friend, inherited] |
Res=A*B
Definición en la línea 454 del archivo Matrix_BASE.h.
bool operator== | ( | const Matrix_BASE< typename MAT::value_type > & | A, |
const MAT & | B | ||
) | [friend, inherited] |
¿¿¿ (A == B) ???
Definición en la línea 460 del archivo Matrix_BASE.h.
bool operator!= | ( | const Matrix_BASE< typename MAT::value_type > & | A, |
const MAT & | B | ||
) | [friend, inherited] |
¿¿¿ (A != B) ???
Definición en la línea 466 del archivo Matrix_BASE.h.
Implementación por defecto para Matrix_BASE<E>::count()
Definición en la línea 167 del archivo Matrix_BASE.h.
Implementación por defecto para Matrix_BASE<E>::clear()
Definición en la línea 178 del archivo Matrix_BASE.h.
bool equals_Matrix | ( | const MAT & | A, |
const MAT & | B | ||
) | [friend, inherited] |
Implementación por defecto para Matrix_BASE<E>::operator==()
Definición en la línea 190 del archivo Matrix_BASE.h.
void add_Matrix | ( | MAT & | Res, |
const MAT & | M | ||
) | [friend, inherited] |
Implementación por defecto para operator+( Matrix_BASE<E>&, Matrix_BASE<E> )
Matrix_BASE<E> operator+( Matrix_BASE<E>&, Matrix_BASE<E> )
.Definición en la línea 239 del archivo Matrix_BASE.h.
void substract_Matrix | ( | MAT & | Res, |
const MAT & | M | ||
) | [friend, inherited] |
Implementación por defecto para operator-( Matrix_BASE<E>&, Matrix_BASE<E> )
Definición en la línea 259 del archivo Matrix_BASE.h.
void multiply_Matrix | ( | MAT & | Res, |
const MAT & | A, | ||
const MAT & | B | ||
) | [friend, inherited] |
Calcula la multiplicación A * B
y almacena el resultado en "Res"
.
"*this"
se ajustan de manera que: Res.rows() == A.rows() && Res.cols() == B.cols()
Matrix_BASE<E> operator*()
."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()
) Definición en la línea 307 del archivo Matrix_BASE.h.
MAT::reference at_Matrix | ( | MAT & | M, |
unsigned | i, | ||
unsigned | j | ||
) | [friend, inherited] |
Implementación por defecto para Matrix_BASE<E>::at()
Definición en la línea 335 del archivo Matrix_BASE.h.
MAT::const_reference at_Matrix | ( | const MAT & | M, |
unsigned | i, | ||
unsigned | j | ||
) | [friend, inherited] |
Implementación por defecto para Matrix_BASE<E>::at() const
.
Definición en la línea 354 del archivo Matrix_BASE.h.
Mx::Matrix_List< E >::m_VL [private] |
Vector en donde están almacenados los valores de la lista de columnas.
Definición en la línea 108 del archivo Matrix_List.h.
Mx::Matrix_List< E >::m_cols [private] |
Cantidad de columnas de la matriz.
Definición en la línea 109 del archivo Matrix_List.h.
Mx::Matrix_List< E >::m_same [private] |
Valor almacenado en la mayor parte de la Matrix_List
.
Definición en la línea 110 del archivo Matrix_List.h.