C++模板实战8:矩阵乘法

本文介绍了如何使用C++模板实现矩阵乘法,矩阵以行优先方式存储。通过迭代器进行行与列的操作,利用transform和累加迭代器完成乘法与累加过程。详细阐述了矩阵乘法中行和列的移动策略,特别是列移动的迭代器设计。
摘要由CSDN通过智能技术生成

     矩阵乘法采用迭代器实现,矩阵采用行优先方式存储,其关键操作是“行×列”,该操作分成三部分:行由一个迭代器完成移动,列有一个列迭代器完成移动,乘法采用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值