zoukankan      html  css  js  c++  java
  • STL学习笔记(四) 迭代器

    条款26:iterator 优先于 const_iterator, reverse_iterator, const_reverse_iterator

    iterator, reverse_iterator 对应于 T*
    const_iterator, const_reverse_iterator 对应于 const T*

    尽量使用 iterator 迭代器:
    insert和erase函数要求使用 iterator,const 和 reverse 型迭代器都不能满足要求
    隐式地从 const_iterator 转为 iterator 是不可能的

    注:减少混用不同类型的迭代器,尽量使用 iterator

    条款27:使用 distance 和 advance 将容器的 const_iterator 显示转换为 iterator

    从 const_iterator 到 iterator 不存在隐式转换,使用 const_cast 强制转换是编译错误的

    typedef vector<int>::iterator Iter;
    typedef vector<int>::const_iterator constIter;
    ...
    vector<int> vec;
    Iter it(vec.begin());        //传建一个 iterator 指向 vec起始位置
    constIter ci;
    advance(it, distance(it,ci)); //仍然错误,参数二义性
    //distance 取得两个迭代器(这两个迭代器必须指向同一个容器)之间的距离
    //advance 将一个迭代器移动指定的距离

    上述转换仍然不能通过编译,因为 distance原型为 distance(InputIterator first, InputIterator last);
    调用distance(it, ci)时不能统一两个迭代器类型(it和ci类型不同),无法推断出InputIterator的实际类型(函数参数推导时的二义性问题)
    所以此时调用distance时必须排除二义性,只有 non-const 向 const 转换

    advance(it, distance<constIter>(it, ci));
    条款28:正确理解 reverse_iterator的base()成员函数 //非常少用 reverse_iterator 迭代器
    条款29:对于逐个字符的输入考虑使用 istreambuf_iterator //非常罕见,慎用
  • 相关阅读:
    Codeforces Gym100502H:Clock Pictures(KMP算法)
    SPOJ MINSUB
    POJ 2796:Feel Good(单调栈)
    搭建(WSTMart)php电商环境时缺少fileinfo函数
    TP微信扫码支付
    tp3.2 支付宝app支付
    tp3.2 支付宝手机网站支付
    Thinkphp3.2+PHPQRCode 二维码生成示例
    百度UEditor粘贴或插入的表格不显示边框的解决办法
    PHP:导出数据到word(包含图片)
  • 原文地址:https://www.cnblogs.com/wwwjieo0/p/3444020.html
Copyright © 2011-2022 走看看