101 void reSize(
unsigned,
unsigned);
102 void reShape(
unsigned,
unsigned);
109 void reSize(
unsigned newsize);
115 std::vector< std::list < Matrix_List_ColVal< E > > >
m_VL;
163 if ( ! (&M != 0 ) ) {
168 if ( ! M.
m_VL.empty() ) {
176 for (
unsigned i=0; i<M.
rows(); ++i) {
177 for (
unsigned j=0; j<M.
cols(); ++j) {
191 if ( m_same != same ) {
218 : m_VL(), m_cols(n), m_same()
220 if (m == 0 || n == 0) {
242 if (rows() != o.
rows() || cols() != o.
cols()) {
246 for (
unsigned i=0; i<rows(); i++) {
247 for (
unsigned j=0; j<cols(); j++) {
248 if ( (*
this)(i,j) != o(i,j) ) {
303 if ( m_VL.size() != o.
m_VL.size() ) {
305 m_VL.resize( o.
m_VL.size() );
307 assert( m_VL.size() == o.
m_VL.size() );
308 for (
int i=0; i<m_VL.size(); ++i ) {
309 this->m_VL[i].clear();
310 this->m_VL[i].splice( m_VL[i].begin(), o.
m_VL[i] );
335 std::swap( this->m_VL , o.
m_VL );
336 std::swap( this->m_cols , o.
m_cols );
337 std::swap( this->m_same , o.
m_same );
348 unsigned rows = m_VL.size();
350 std::vector< std::list < Matrix_List_ColVal< E > > > TMP(m);
351 for (
unsigned i=0 ; i<rows ; ++i ) {
352 TMP[i].splice( TMP[i].begin(), this->m_VL[i] );
354 this->m_VL.resize(m);
355 for (
unsigned i=0 ; i<rows ; ++i ) {
356 this->m_VL[i].splice( this->m_VL[i].begin() , TMP[i] );
359 else if ( m < rows ) {
360 this->m_VL.resize(m);
365 for (
unsigned i=0 ; i<rows ; ++i ) {
366 typedef typename std::list < Matrix_List_ColVal< E > >::iterator ITR;
367 ITR it = this->m_VL[i].begin();
368 while ( it != this->m_VL[i].end() ) {
369 if ( it->m_col >= n ) {
370 it = this->m_VL[i].erase( it );
419 if ( m * n == m_VL.size() * m_cols ) {
439 assert(
"Matrix_List<E>::operator()()" && (i < rows()) );
440 assert(
"Matrix_List<E>::operator()()" && (j < cols()) );
442 typedef typename std::list < Matrix_List_ColVal< E > >::const_iterator ITR;
443 ITR it = this->m_VL[i].begin();
444 while ( it != this->m_VL[i].end() ) {
445 if ( it->m_col == j ) {
450 if ( it == this->m_VL[i].end() ) {
487 assert(
"Matrix_List<E>::operator()()" && (i < rows()) );
488 assert(
"Matrix_List<E>::operator()()" && (j < cols()) );
491 typedef typename std::list < Matrix_List_ColVal< E > >::iterator ITR;
492 ITR it = this->m_VL[i].begin();
493 while ( it != this->m_VL[i].end() ) {
494 if ( it->m_col == j ) {
499 if ( it == this->m_VL[i].end() ) {
501 it = this->m_VL[i].begin();
531 assert(
"Matrix_List<E>::add()" && (rows() == O.
rows()) && (cols() == O.
cols()) );
534 for (
unsigned i=0 ; i<rows() ; ++i ) {
535 for (
unsigned j=0 ; j<cols() ; ++j ) {
536 this->operator()(i,j) += O(i,j);
560 assert(
"Matrix_List<E>::substract()" && (rows() == O.
rows()) && (cols() == O.
cols()) );
562 for (
unsigned i=0 ; i<rows() ; ++i ) {
563 for (
unsigned j=0 ; j<cols() ; ++j ) {
564 this->operator()(i,j) -= O(i,j);
593 assert( (A.
cols() == B.
rows()) &&
" => Matrix_List<E>::multiply()" );
597 for (
unsigned i=0; i<rows(); i++) {
598 for (
unsigned j=0; j<cols(); j++) {
600 for (
unsigned k=0; k<A.
cols(); k++) {
601 sum = sum + A(i,k) * B(k,j);
613 std::ostream& operator<<(std::ostream& COUT, const Matrix_List<E>& M) {
614 COUT <<
'[' << M.rows() <<
'x' << M.cols() <<
']' << std::endl;
615 for (
unsigned i=0; i < M.rows(); ++i) {
616 for (
unsigned j=0; j < M.cols(); ++j) {
617 COUT <<
" " << M(i,j);
627 assert(
"This code has not been tested" );
631 for (
unsigned i=0; i<rows; i++) {
632 for (
unsigned j=0; j<cols; j++) {
649 #endif // Matrix_List_h
Matrix_List & operator=(const Matrix_List &o)
Sinónimo de this->copy(o)
void reserve(size_type _Count)
Ajusta la matriz para que pueda almacenar n valores diferentes a getDefault().
friend Matrix_List operator+(const Matrix_List &A, const Matrix_List &B)
Retorna A+B.
const E & getDefault()
Valor almacenado en la mayor parte de la Matrix_List.
unsigned size() const
Cantidad de valores almacenados en la matriz.
unsigned m_cols
Cantidad de columnas de la matris.
unsigned rows() const
Cantidad de filas de la matriz.
friend bool operator==(const Matrix_List &p, const Matrix_List &q)
¿¿¿ (p == q) ???
E m_val
Valor almacenado en la matriz.
void substract(const Matrix_List &)
Le resta a "*this" la matriz "O".
Matrix_List(unsigned m=1, unsigned n=1)
Constructor de vector.
unsigned count() const
Cantidad de valores almacenados en la matriz.
Funciones para manipular Matrix_BASE<>.
std::istream & operator>>(std::istream &CIN, Matrix< E > &M)
Obtiene del flujo CIN el valor para M[][].
void clear()
Deja el valor de *this en el valor en que lo inicializa el constructor de vector. ...
Matrix_List & swap(Matrix_List &o)
Intercambia los valores de "*this" y "o".
bool check_ok(const Matrix< T > &M)
Verifica la invariante de la clase.
value_type & reference
Tipo del objeto almacenado, similar al nombre usado en STL.
Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala implementada con listas...
~Matrix_List()
Destructor.
Matrix_List(const value_type V)
Matriz escalar de valor V.
unsigned size_type
Tipo del tamaño de un objeto, similar al nombre usado en STL.
void add(const Matrix_List &)
Le suma a "*this" la matriz "O".
E m_same
Valor almacenado en la mayor parte de la Matrix_List.
size_type capacity() const
Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.
reference operator()(unsigned, unsigned)
Retorna una referencia al elemento [i,j] de la matriz.
friend bool operator!=(const Matrix_List &p, const Matrix_List &q)
¿¿¿ (p != q) ???
Clase privada para implementar la lista de valores de cada fila.
Matrix_List & move(Matrix_List &o)
Traslada el valor de "o" a "*this".
std::vector< std::list< Matrix_List_ColVal< E > > > m_VL
Vector que contiene la lista de valores de las columnas.
E value_type
Tipo del objeto almacenado, similar al nombre usado en STL.
friend Matrix_List operator*(const Matrix_List &A, const Matrix_List &B)
Retorna A*B.
unsigned cols() const
Cantidad de columnas de la Matriz.
Matrix_List_ColVal(unsigned col, const E &val)
constructor
const value_type & const_reference
Tipo del objeto almacenado, similar al nombre usado en STL.
friend class test_Matrix_List
Datos de prueba para la clase.
unsigned m_col
Columna del valor almacenado en la matriz.
bool same(const Matrix_List &o) const
Retorna true si "o" comparte sus valores con "*this".
Matrix_List & copy(const Matrix_List &o)
Copia desde "o".
void reSize(unsigned, unsigned)
Le cambia las dimensiones a la matriz.
void reShape(unsigned, unsigned)
Le ajusta las dimensiones a la matriz.
void multiply(const Matrix_List &, const Matrix_List &)
Calcula la multiplicación A * B y la almacena en "*this".
void setDefault(const E &same)
Define el escalar que por defecto está en todas las entradas de la Matrix_List.
friend bool check_ok(const Matrix_List< T > &M)
Verifica la invariante de la clase.
bool equals(const Matrix_List &o) const
¿¿¿ (*this==o) ???
friend Matrix_List operator-(const Matrix_List &A, const Matrix_List &B)
Retorna A-B.