1.1 --- a/src/work/alpar/matrix.cc Sun Apr 17 18:57:22 2005 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,75 +0,0 @@
1.4 -#include <lemon/time_measure.h>
1.5 -#include <vector>
1.6 -
1.7 -template<class T>
1.8 -class Matrix
1.9 -{
1.10 -public:
1.11 - int m,n;
1.12 - std::vector<T> values;
1.13 -
1.14 - Matrix(int _m, int _n) : m(_m), n(_n), values(n*m) {}
1.15 - typename std::vector<T>::reference operator()(int i, int j)
1.16 - { return values[i*n+j];}
1.17 -
1.18 - class Row
1.19 - {
1.20 - public:
1.21 - Matrix<T> &mat;
1.22 - int row;
1.23 -
1.24 - Row(Matrix<T> &_mat,int _row) : mat(_mat), row(_row) {}
1.25 - typename std::vector<T>::reference operator()(int j)
1.26 - { return mat.values[row*mat.n+j];}
1.27 - };
1.28 - class Column
1.29 - {
1.30 - public:
1.31 - Matrix<T> &mat;
1.32 - int col;
1.33 -
1.34 - Column(Matrix<T> &_mat,int _col) : mat(_mat), col(_col) {}
1.35 - typename std::vector<T>::reference operator[](int i)
1.36 - { return mat.values[i*mat.n+col];}
1.37 - };
1.38 -
1.39 - Row operator[](int i) { return Row(*this,i); }
1.40 - Column operator()(int j) { return Column(*this,j); }
1.41 -};
1.42 -
1.43 -main()
1.44 -{
1.45 - const int COUNT=1000000;
1.46 - const int SIZE=100;
1.47 -
1.48 - Matrix<int> A(SIZE,SIZE);
1.49 -
1.50 - for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) A(i,j)=i+j;
1.51 -
1.52 - int s=0;
1.53 - lemon::Timer T;
1.54 - for(int c=0;c<COUNT;c++) {
1.55 - for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A[i](j);
1.56 - }
1.57 - std::cout << "A[i](j): " << T << ' ' << s <<'\n';
1.58 - s=0;
1.59 - T.reset();
1.60 - for(int c=0;c<COUNT;c++) {
1.61 - for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A(i,j);
1.62 - }
1.63 - std::cout << "A(i,j): " << T << ' ' << s << '\n';
1.64 - s=0;
1.65 - T.reset();
1.66 - for(int c=0;c<COUNT;c++) {
1.67 - for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A(j)[i];
1.68 - }
1.69 - std::cout << "A(j)[i]: " << T << ' ' << s << '\n';
1.70 - s=0;
1.71 - T.reset();
1.72 - for(int c=0;c<COUNT;c++) {
1.73 - for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A(i,j);
1.74 - }
1.75 - std::cout << "A(j,i): " << T << ' ' << s << "\n\n";
1.76 -
1.77 - return 0;
1.78 -}