迭代器模式

C++ stl引入的迭代器模式,除了本身为stl容器的操作提供了统一的接口,方便stl泛型算法以统一的方式操作所有stl容器外,

在其它所有涉及遍历数据的应用地方,都有它的用武之地,下面列举几个我自己按迭代器模式封装的几个工具类,抛砖引玉。


一、迭代分割的子串


class CStrtok
{
public:

    //构造函数,接收参数
    CStrtok (char *pcSource, const char * pcSep){
        m_pcSep = pcSep;
        m_pcCur = strtok_s(pcSource, pcSep, &m_pcContext);
    }

    //判断是否有下一个子字符串
    bool hasMore() const {
        return m_pcCur != NULL;
    }

    //返回下一个子字符串
    const char * next() {
        const char *pcNext = m_pcCur;
        m_pcCur = strtok_s(NULL, m_pcSep, &m_pcContext);
        return pcNext;
    }

private:
    char * m_pcCur;
    const char * m_pcSep;
    char * m_pcContext;
};


以下是测试代码:

int main()
{
    char szConf[32] = "idlist=(11,112,221)";
    CStrtok parse(szConf, "=)(,");
    if (parse.hasMore())
    {
        printf ("conf name: %s \n", parse.next());
    }
    while (parse.hasMore())
    {
        printf ("conf value: %s \n", parse.next());
    }

    return 0;
}



输出结果:

conf name: idlist
conf value: 11
conf value: 112
conf value: 221
请按任意键继续. . .


由于只能迭代一次,因此CStrtok是一次性迭代器


二、网络报文的分包和组包


由于tcp连接是底层是按块发送的,经过网络还可能会被分包处理,因此需要通信两端进行分包或组包

这个场景也非常适合使用迭代器模式


SendBuff类用于组包发送,大概的思路就是通过SendBuff,将多个小的报文合并到一个大报文里发送

通常对于tcp连接,我们使用8K数据作为一个包长度的上限来发送是比较合适的


class SendBuff

{


};





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值