您的位置:首页 > 其它

STL容器和迭代器用法归纳(2)

2008-01-20 22:10 267 查看
二 .deque:在<deque>中定义如下:


template <class Type, class Allocator=allocator<Type>> class deque;

deque与vector几乎完全相同,但用的较少,因为它适用于要从序列的两端插入或删除,但仍需快速的存取所有元素的情况,通常这样的用法不多。其所提供的方法与vector使用方式基本一致。两者的主要区别在于:
1。实现不必把元素连续地存储在内存中
2。deque提供了push_front和pop_front,这是vector所没有的
3。deque没有通过reserve或capacity提供内存管理机制
4。deque在队头和队尾插入和删除元素时都为常量时间
三。list(列表):是一个标准双向链表。在<list>中定于如下:


template <class Type, class Allocator=allocator<Type> > class list;

1。因为同属顺序容器,其方法的使用形式与vector类似。列表不提供[]的随机访问操作,只提供了front和back两种方法。元素增加和删除的方法有:push_back,pop_back,insert,erase和 clear。类似于deque,也提供了push_front和pop_front。类似于deque,不同于vector,列表支持size和empty。但不支持resize和capacity
2。在任意位置插入和删除元素时都为常量时间,不过访问各个元素较慢,为线性时间。如果应用要从数据结构完成多次插入和删除操作,而且不需要快速的基于索引的元素访问,列表就很适合。
四、迭代器
前面所述的容器都有迭代器的访问方式,而且它确实一种通用的访问容器元素的方式。可以把迭代器认为是容器中特定元素的一个指针(安全性也与指针几乎一样,迭代器并不会完成任何合法性的验证)。可以用operator++移至下一个元素,可以用operator*和operator-〉来访问具体的元素或元素的字段。不同的容器提供的迭代器功能有所不同。标准定义了5类迭代器。

迭代器种类支持的操作备注
输入operator++
operator*
operator->
复制构造函数
operator=
operator==
operator!=
提供只读访问,仅为前向(没有operator--来反向移动)。可以用赋值和复制构造函数来赋值和复制迭代器。可以比较迭代器的相等性
输出operator++
operator*
复制构造函数
提供只读访问,仅为前向。不能赋值和复制迭代器。不能比较迭代器的相等性
前向operator++
operator*
operator->
复制构造函数
默认构造函数
operator=
operator==
operator!=
提供读写访问,仅为前向。可以用赋值和复制构造函数来赋值和复制迭代器。可以比较迭代器的相等性
双向前向迭代器的功能,再加上:
operator--
提供了前向迭代器的所有功能。同时还可以反向移动到前面的元素
随机访问双向迭代器的功能,再加上:
operator+,operator-,
operator+=,operator-=,
operator<,operator>,
operator<=,operator>=
operator[]
等同于哑指针:迭代器支持指针运算、数组索引语法,以及各种形式的比较
提供迭代器的标准容器都配备有随机访问或双向访问迭代器。STL中每个支持迭代器的容器类为迭代器类型提供了公共的typedef,名为iterator和const_iterator(对容器的元素提供了只读访问).在使用++运算符时,尽可能使用先自增方式而不是后自增,因为先自增往往更高效。it++(it是定义的迭代器)返回一个新的迭代器对象,++it返回对象的一个引用。
容器提供一个begin()方法,返回指示容器中的第一个元素的迭代器,提供一个end()方法会返回最后元素之后的值的一个引用。他们加在一起提供了一个半开区间,即包括第一个元素,但不包括最后一个元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: