COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/alpar/matrix.cc @ 1064:5f0a20861a77

Last change on this file since 1064:5f0a20861a77 was 994:062f98d96f40, checked in by Alpar Juttner, 20 years ago

Matrix interface running time test...

File size: 1.7 KB
RevLine 
[994]1#include <lemon/time_measure.h>
2#include <vector>
3
4template<class T>
5class Matrix
6{
7public:
8  int m,n;
9  std::vector<T> values;
10 
11  Matrix(int _m, int _n) : m(_m), n(_n), values(n*m) {}
12  typename std::vector<T>::reference operator()(int i, int j)
13  { return values[i*n+j];}
14
15  class Row
16  {
17  public:
18    Matrix<T> &mat;
19    int row;
20   
21    Row(Matrix<T> &_mat,int _row) : mat(_mat), row(_row) {}
22    typename std::vector<T>::reference operator()(int j)
23    { return mat.values[row*mat.n+j];}
24  };
25  class Column
26  {
27  public:
28    Matrix<T> &mat;
29    int col;
30   
31    Column(Matrix<T> &_mat,int _col) : mat(_mat), col(_col) {}
32    typename std::vector<T>::reference operator[](int i)
33    { return mat.values[i*mat.n+col];}
34  };
35 
36  Row operator[](int i) { return Row(*this,i); }
37  Column operator()(int j) { return Column(*this,j); }
38};
39
40main()
41{
42  const int COUNT=1000000;
43  const int SIZE=100;
44 
45  Matrix<int> A(SIZE,SIZE);
46 
47  for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) A(i,j)=i+j;
48
49  int s=0;
50  lemon::Timer T;
51  for(int c=0;c<COUNT;c++) {
52    for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A[i](j);
53  }
54  std::cout << "A[i](j): " << T << ' ' << s <<'\n';
55  s=0;
56  T.reset();
57  for(int c=0;c<COUNT;c++) {
58    for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A(i,j);
59  }
60  std::cout << "A(i,j): " << T << ' ' << s << '\n';
61  s=0;
62  T.reset();
63  for(int c=0;c<COUNT;c++) {
64    for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A(j)[i];
65  }
66  std::cout << "A(j)[i]: " << T << ' ' << s << '\n';
67  s=0;
68  T.reset();
69  for(int c=0;c<COUNT;c++) {
70    for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) s+=A(i,j);
71  }
72  std::cout << "A(j,i): " << T << ' ' << s << "\n\n";
73
74  return 0;
75}
Note: See TracBrowser for help on using the repository browser.