template < class Point > class PD_D_row_iterator { // ... // data members Point_it points; // iterator referring to C matrix int i; // row index int j; // column index public: PD_D_row_iterator( Point_it it, int row) : points(it), i(row), j(0) { } CT operator * ( ) { return std::inner_product( points[ i].begin( ), points[ i].end( ), points[ j].begin( ), CT( )); } // other operators required for random access iterators // ... };