Two examples showing a bit more convenient way to implement named parameters.
1 #include <lemon/time_measure.h>
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];}
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];}
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];}
36 Row operator[](int i) { return Row(*this,i); }
37 Column operator()(int j) { return Column(*this,j); }
42 const int COUNT=1000000;
45 Matrix<int> A(SIZE,SIZE);
47 for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) A(i,j)=i+j;
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);
54 std::cout << "A[i](j): " << T << ' ' << s <<'\n';
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);
60 std::cout << "A(i,j): " << T << ' ' << s << '\n';
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];
66 std::cout << "A(j)[i]: " << T << ' ' << s << '\n';
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);
72 std::cout << "A(j,i): " << T << ' ' << s << "\n\n";