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

Tips:

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

B.

template
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 {};
[GeekBand][STL与泛型编程]第二周笔记_第1张图片
它们之间的关系

2. 算法举例

  1. 算法 accumulate


    [GeekBand][STL与泛型编程]第二周笔记_第2张图片
    算法 accumulate

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

  2. 算法 for_each


    [GeekBand][STL与泛型编程]第二周笔记_第3张图片
    算法 for_each

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

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


    [GeekBand][STL与泛型编程]第二周笔记_第4张图片
    算法 replace
    [GeekBand][STL与泛型编程]第二周笔记_第5张图片
    算法 replace_if
    [GeekBand][STL与泛型编程]第二周笔记_第6张图片
    算法 replace_copy
  2. 算法 count,count_if


    [GeekBand][STL与泛型编程]第二周笔记_第7张图片
    算法 count,count_if
    [GeekBand][STL与泛型编程]第二周笔记_第8张图片
    容器成员函数整理
  3. 算法 find,find_if


    [GeekBand][STL与泛型编程]第二周笔记_第9张图片
    算法 find,find_if
    [GeekBand][STL与泛型编程]第二周笔记_第10张图片
    容器成员函数整理
  4. 算法 sort


    [GeekBand][STL与泛型编程]第二周笔记_第11张图片
    算法 sort 使用
    [GeekBand][STL与泛型编程]第二周笔记_第12张图片
    容器成员函数整理
  5. 关于 reverse iterator,rbegin(),rend()


    [GeekBand][STL与泛型编程]第二周笔记_第13张图片
    关于 reverse iterator,rbegin(),rend()
    [GeekBand][STL与泛型编程]第二周笔记_第14张图片
    iterator adapter
  6. 算法 binary_search


    [GeekBand][STL与泛型编程]第二周笔记_第15张图片
    算法 binary_search

3. 仿函数 functors

[GeekBand][STL与泛型编程]第二周笔记_第16张图片
三类 functor

仿函数主要为算法服务。
[GeekBand][STL与泛型编程]第二周笔记_第17张图片
仿函数 functors 的可适配(adaptable)条件

4. Adapter

[GeekBand][STL与泛型编程]第二周笔记_第18张图片
存在多种 Adapters

你可能感兴趣的:([GeekBand][STL与泛型编程]第二周笔记)