[GeekBand][STL与泛型编程]第二周笔记

Tips:

  1. 算法 Algorithm 是 function template.
  2. Algorithms 看不见 Containers,对其一无所知。所以,它所需要的一切信息都必须从 Iterators 取得。而 Iterators (由 Containers 供应)必须能够回答 Algorithm 的所有提问,才能搭配该 Algorithm 的所有操作。
  3. Algorithm 的一般形式
    A.
template<typename Iterator>
Algorithm(Iterator itr1, Iterator itr2)
{
    …
}

B.

template<typename Iterator, typename Cmp>
Algorithm(Iterator itr1, Iterator itr2, Cmp comp)
{
    …
}
  1. Algorithms 和 Iterators 之间沟通需要通过 iterator_traits 。确保 Iterators 不是 class 时也能正常运件运作。

1. 迭代器的分类

五种 iterator category

struct input_iterator_tag {};
struct output_iterator_tag {};
struct forward_iterator_tag :public input_iterator_tag {};
struct bidirectional_iterator_tag :public forward_iterator_tag {};
struct random_access_iterator_tag :public bidirectional_iterator_tag {};
它们之间的关系

2. 算法举例

  1. 算法 accumulate


    算法 accumulate

    算法 accumulate 对元素执行累计动作。

  2. 算法 for_each


    算法 for_each

    算法 for_each 对每个元素执行同一个动作。
    该算法可用 range-based for statement (Since C++11)代替:

for (decl : coll)
{
    statement
}
  1. 算法 replace,replace_if,replace_copy


    算法 replace
    算法 replace_if
    算法 replace_copy
  2. 算法 count,count_if


    算法 count,count_if
    容器成员函数整理
  3. 算法 find,find_if


    算法 find,find_if
    容器成员函数整理
  4. 算法 sort


    算法 sort 使用
    容器成员函数整理
  5. 关于 reverse iterator,rbegin(),rend()


    关于 reverse iterator,rbegin(),rend()
    iterator adapter
  6. 算法 binary_search


    算法 binary_search

3. 仿函数 functors

三类 functor

仿函数主要为算法服务。
仿函数 functors 的可适配(adaptable)条件

4. Adapter

存在多种 Adapters
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容