算法看不见Containers,对其一无所知。算法的提问,由迭代器Iterators来回答。
所以Iterators必须能够回答算法的所有提问(记得之前看过的5大Traits)。
如果算法问到了迭代器不会的,编译到那一行,报错。
迭代器的分类
1 | struct input_iterator_tag {}; |
除了output,其余四个struct层层继承。
其中input和output这两种类型分别对应的是istream和ostream。
而STL容器用的都是其余三种。(单向、双向、可跳跃)
typeid
1
2
3
4
5
template <typename I>
void display_category(I itr){
cout<<tpyeid(itr).name();
}
29 分类对算法的影响 这节课还是很重要的。
计算distance时
input
: 从头走到尾 random
的则可以用last-first
30 Example
1 | struct myClass{ |
仿函数。myObj就可以当函数参数传入。
- sort
1 | sort(vt.rbegin(),vt.rend());//这么就是从大到小 |
sort必须传入random,所以list\forward_list就不能传入sort()。list补不能跳着走.list 有自己的sort()方法。
functor
STL规定每个Adaptable Function都应挑选一个适当者继承之。
有两个可选的(其实就是做了typedef
):
1 | template <class Arg,class Result> |
子类继承上面的,大小不会增加。只是继承了typedef。
Adapter
容器适配器:stack\queue 里面都有个deque
函数适配器
binder2nd()
绑定第二实参