STL第七课

来源:互联网 发布:origin for mac绘图 编辑:程序博客网 时间:2024/05/16 04:57

Stream Iterators:一种用来读写stream的迭代器
1.istream_iterator<string>(cin):元素透过operator>>被读取出来;
2.istream_iterator<string>():调用istream iterators的default构造函数, 产生一个代表"流结束符号"的迭代器.
3.ostrream_iterator<string>(cout, "/n"):透过operator<<向cout写入strings.第二个参数被做为元素间的分隔符, 可有可无.


算法unique_copy()会消除毗邻的重复值.


Reverse Iterators(逆向迭代器):第三种预先定义的迭代配接器.
它将increament运算转换为decreament运算. 反之亦然. 所有容器都要以透过成员函数rbegin()和rend()产生出reverse iterators.
rbegin()指向群集最后一个元素的下一位置.*coll.rbegin()返回的是最后一个元素的值.
rend()指向第一个元素的前一个位置.*coll.rend()同*coll.end()一样也没有定义.

注意:虽然rbegin()和end()所指向的位置相同,都是最后一个元素的下一位置,可是rbegin()的值是container的最后一个元素的值,end()指向的值却是空。


Manipulating Algorithms(更易型算法):删除或重排或修改元素的算法.
移除元素:remove()
remove()并没有改变群集中的元素的数量. end()返回的还是当初那个终点, size()返回的还是当初那个大小.
你可以把remove()的返回值设定给end迭代器:
list<int>::iterator end = remove(coll.begin(), coll.end(), 3);
这个end是逻辑上的新终点.
你还可对通过测定群集之"逻辑"终点和实际终点间的距离, 获得被删除元素的数量:
distance(end, coll.end());
distance()返回两个迭代器间的距离.
erase(end, coll.end()):删除参数所指区间内的全部元素.

如果你需要以单一语句来删除元素, 可以如此操作:
coll.erase(remove(coll.begin(), coll.end(), 3), coll.end());

任何以迭代器访问容器元素的算法, 都不得透过迭代器调用容器类别所提供的任何成员函数.

关联容器不能被当作更易型算法的操作目标, 否则会破坏关联型容器的已序特性.如果你更易关联式容器中的元素, 会导致编译错误.

那么如何从关联容器中删除元素呢?方法是调用它们的成员函数.每一种关联式容器都提供用以移除元素的成员函数.

使用自定义的泛型函数
STL是一个可扩展的框架.
为了让我们方便写出真正的泛型函数, 每一种容器都提供了一些内部的型别定义. 

原创粉丝点击