- STL中算法 是 function template。
- 算法看不见容器,对其一无所知,所以它所需要的一切信息都必须从itertor取得,而iterators(由容器提供)必须能够回答算法的所有提问,才能搭配该算法的所有操作。
- 迭代器的分类:
- struct input_iterator_tag {};
- struct output_iterator_tag {};
- struct forward_iterator_tag {} : public input_iterator_tag {};
- struct bidirectional_iterator_tag {} : public forward_iterator_tag {};
- sturct random_access_iterator_tag {} : public bidirectional_iterator_tag {};
- 迭代器分类对算法的影响,示例:求两个迭代器之间的距离的distance算法,如果迭代器是 random_access_iterator,实现用last - first。如果迭代器是input_iterator 实现用while(first != last) ++first; ++cnt;。标准库算法的设计,算法是主函数,通过迭代器的分类调用不同的次函数,以适应不同的容器或做特化的设计提高算法效率。标准库算法源码中有对iterator_category的暗示。
- 仿函数 (class template),重载了(),为算法提供服务。