矩阵乘法采用迭代器实现,矩阵采用行优先方式存储,其关键操作是“行×列”,该操作分成三部分:行由一个迭代器完成移动,列有一个列迭代器完成移动,乘法采用transform完成其中需要一个累加操作有累加迭代器完成
1 矩阵乘法中涉及到行×列,若矩阵采用行优先方式存储,那么行的移动相对简单,列的移动相对复杂一点,针对列移动采用一个迭代器实现,如下:
// 文件名:skip_iterator.hpp
#pragma once
#include <iterator>
template<typename T>
class skip_iterator :
public std::iterator<std::random_access_iterator_tag, T>
{
T *pos; // 所指元素地址,pos是当前列的某个位置上的元素
size_t step; // 步长,其实就是列数,列上每移动一步相当于移动的元素等于列数
public:
// 类型定义
typedef std::iterator<std::random_access_iterator_tag, T> base_type;
typedef typename base_type::difference_type difference_type;
typedef typename base_type::reference reference;
// 构造函数
skip_iterator(T *pos, size_t step) : pos(pos), step(step) {}
skip_iterator(const skip_iterator &i) : pos(i.pos), step(step) {}
difference_type
operator - (skip_iterator r) {return (pos - r.pos) / step;}
skip_iterator
operator + (typename base_type::difference_type n)
{return skip_iterator(pos + n * step);}
skip_iterator
operator ++() {pos += step; return *this;}//从某一特定的列上一个元素移动到该列的下一个元素则要移动的元素数目等于列数step
bool operator == (skip_iterator const &r) {return pos == r.pos;}
bo