zoukankan      html  css  js  c++  java
  • Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    1 Iterator 的类型

    标准容器提供了四种迭代器,以 conainer<T> 为例:

    • itertor:
      形如 T* ,正向增长。
    • const_itertor:
      形如 const T * ,指向内容只读,正向增长。
    • reverse_itertor:
      形如 T* ,反向增长。
    • const_reverse_itertor:
      形如 const T * ,指向内容只读,反向增长。

    2 迭代器之间的转换

    他们之间的转换关系如下图所示:

    iterator_conversion.png

    Figure 1: Conversion between iterators

    ./images/iterator_conversion.dot

    其中值得注意的是, reverse_iterator 可以通过 base() 来转换到 iterator ,但这个转换可能并不是我们真正需要的那个。而除此之外,剩余的两种迭代器都无法转换成 iterator

    3 Iterator is Special

    瞅一眼 vector<T> 的几个方法:

    iterator insert(iterator p, const T& x);
    iterator erase(iterator p);
    iterator erase(iterator rangebegin, iterator rangeEnd);
    

    这里用到的都是 iterator

    4 总结:

    Prefer Iterator, 原因:

    • 若干函数(插入,删除等)需要的都是 iterator
    • const_iterator 不能隐式地转换成 iterator
    • reverse_iteratoriterator 的转换可能需要迭代器的调整。
  • 相关阅读:
    从POJ1958引发对n盘m塔Hanoi问题的思考
    SPOJGSS3 Can you answer these queries III
    【模板】SPFA判负环(洛谷P3385)
    【模板】强联通缩点(洛谷P3387)
    Luogu P2186 小Z的栈函数
    Luogu P2129 小Z的情书
    LGBT学分块
    LGBT玩扫雷
    A 美丽的子树
    B(升降序列)
  • 原文地址:https://www.cnblogs.com/yangyingchao/p/3409413.html
Copyright © 2011-2022 走看看