STL
提供的所有算法都是模板,所以需要通过迭代器来对这些模板进行特例化;对象指针使可以用来当做任意种类的迭代器的;<utility>
,<iterator>
,<memory>
三种;
for(;<not done>;++next)
*next = <whatvecr>;
next
表示的是类型为X
的一个对象;./输出迭代器的属性.png
;*next=<whatever>
将<whatever>
的值赋值给序列中将要产生的下一个元素;++next
指向下一个需要操作的元素;
for(p=first;p!=last;++p)
<process>(*p);
p
,first
,last
表示的都是迭代器类型X
的对象,其中last
并不表示实际序列中的任何一个元素,用于表示结尾的标志,不能够尝试获得这些元素的值;X
的迭代器p
和q
没有指向同一个元素,既p!=q
;*p
是类型T
的一个右值value
.右值表示的是一个拥有值表达式但是并不一定需要来引用一个对象;++p
用来改变p
的值,用来指向下一个元素;./输入迭代器.png
;
while(first!=last)
<process>(*first++);
./前向迭代器.png
;随机存取迭代器
迭代器的使用选择
utility
utility
中包含的是:只有模板类的pair
,一些与之相关的模板函数和操作符,以及其他四个模板操作符;pair
:可以构造pair<T,U>
对象然后通过x.first
以及x.second
来访问对象里面的成员;make_pair()
是用来创建产生pair
对象,但是通过这种方法在生成pair
对象时,会忽略掉所有的const
属性,也就是说不可以通过make_pair
对象来产生 pair<T,U>(x,y)
来生成pair
对象;operator== operator<
是用来比较两个pair
对象的;pair
的过程中出现pair
对象没有定义的错误,需要包含pair
对象;