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

*/-->

div.org-src-container {
font-size: 85%;
font-family: monospace;
}

1 Iterator 的类型

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

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

2 迭代器之间的转换

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

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

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 的转换可能需要迭代器的调整。
上一篇:Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据


下一篇:461. Hamming Distance(leetcode)