知白守黑

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关联容器,根据元素的值或是元素的键值,来自动排列他的元素。关联容器是以二叉树形式组织起来的。这几种关联容器之间的区别在于元素的种类,以及处理副本的方式。排列的默认操作是"<",你也可以重载它。判断相等的方式是若两个元素之间都不小于对方,则认定相等。所有关联容器的实现方式都是基于同一种对二叉树的实现,因此可以认为set是键值和值相等的map。

这四种关联容器的粗略特点:

Sets:比较的是值,不允许重复的元素;

Multisets:比较的是值,允许重复的元素;

Map:比较的是键值,不允许重复的键值;

Multimaps:比较的是键值,允许重复的键值。

特殊容器,或者说是基本容器的变种(container adapters),包括栈、队列和优先级队列等。

迭代器的是每一类容器都定义的嵌套类,因此从接口上来看,所有的迭代器行为是一致的。所有的容器都提供了相应的成员函数,如begin()、end(),使得迭代器能够操纵容器的元素。Begin()指向容器的第一个元素,end()指向最后一个元素后面的位置,二者形成了一个开闭区间。这样的好处是很容易判断空容器:begin == end,另一个好处是遍历容器内元素也很容易。迭代器有两种iterator与const_iterator,区别是前者可读可写,后者只读。

++i与i++之间应当通常选择++i,因为前者更加高效。不过我过去的习惯使用i++,得改一下。

在跑例程的时候发现一个问题。例程是对list<TypeT>的遍历,在for循环中,终结条件我用pos < coll.end()就编译错误,而书上pos !=coll.end()就没问题,现在还不知道怎么回事。

posted on 2009-06-01 11:14  知白守黑  阅读(242)  评论(0编辑  收藏  举报