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

二 .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()方法会返回最后元素之后的值的一个引用。他们加在一起提供了一个半开区间,即包括第一个元素,但不包括最后一个元素。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值