stl实践指南 practical guide to stl
作者:jeff bogan 【相关文章:把javascript,vbscript】 【扩展阅读:一个轻巧的每日构建解决方案】翻译:周翔 【扩展信息:关于建立《文件格式、协议大全》共享版 的】(接中篇)
游标(iterator)
我说过游标是指针,但不仅仅是指针。游标与指针很像,功能很像指针,但是实际上,游标是通过重载一元的”*”与”->”来从容器中间接地返回一个值。将这些值存储在容器中并不是一个好主意,因为每当一个新值添加到容器中或者有一个值从容器中删除,这些值就会失效。在某种程度上,游标可以看作是句柄(handle)。通常情况下游标(iterator)的类型可以有所变化,这样容器也会有几种不同方式的转变:
iterator——对于除了vector以外的其他任何容器,你可以通过这种游标在一次操作中在容器中朝向前的方向走一步。这意味着对于这种游标你只能使用“++”操作符。而不能使用“--”或“+=”操作符。而对于vector这一种容器,你可以使用“+=”、“—”、“++”、“-=”中的任何一种操作符与“<”、“<=”、“>”、“>=”、“==”、“!=”等比较运算符。 reverse_iterator ——如果你想用向后的方向而不是向前的方向的游标来遍历除vector之外的容器中的元素,你可以使用reverse_iterator 来反转遍历的方向,你还可以用rbegin()来代替begin(),用rend()代替end(),而此时的“++”操作符会朝向后的方向遍历。 const_iterator ——一个向前方向的游标,它返回一个常数值。你可以使用这种类型的游标来指向一个只读的值。 const_reverse_iterator ——一个朝反方向遍历的游标,它返回一个常数值。set与map中的排序
除了类型与值外,模板含有其他的参数。你可以传递一个回调函数(通常所说的声明“predicate”——这是带有一个参数的函数返回一个布尔值)。例如,如果你想自动建立一个集合,集合中的元素按升序排列,你可以用简明的方法建立一个set类:
set <int, greater<int> > set1
greater 是另一个模板函数(范型函数),当值放置在容器中后,它用来为这些值排序。如果你想按降序排列这些值,你可以这样写:
set <int, less<int> > set1
在实现算法时,将声明(predicate)作为一个参数传递到一个stl模板类中时会遇到很多的其他情况,下面将会对这些情况进行详细描述。
stl 的烦恼之二——错误信息
... 下一页