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类迭代器。
提供迭代器的标准容器都配备有随机访问或双向访问迭代器。STL中每个支持迭代器的容器类为迭代器类型提供了公共的typedef,名为iterator和const_iterator(对容器的元素提供了只读访问).在使用++运算符时,尽可能使用先自增方式而不是后自增,因为先自增往往更高效。it++(it是定义的迭代器)返回一个新的迭代器对象,++it返回对象的一个引用。
容器提供一个begin()方法,返回指示容器中的第一个元素的迭代器,提供一个end()方法会返回最后元素之后的值的一个引用。他们加在一起提供了一个半开区间,即包括第一个元素,但不包括最后一个元素。
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[] | 等同于哑指针:迭代器支持指针运算、数组索引语法,以及各种形式的比较 |
容器提供一个begin()方法,返回指示容器中的第一个元素的迭代器,提供一个end()方法会返回最后元素之后的值的一个引用。他们加在一起提供了一个半开区间,即包括第一个元素,但不包括最后一个元素。
相关文章推荐
- STL容器和迭代器用法归纳(1)
- STL容器和迭代器用法归纳(3)
- 标准模板库 STL-1 编程题#1(Coursera 程序设计与算法 专项课程3;用法:迭代器 ostream_iterator,容器 set)
- STL 容器和迭代器连载7_容器大小的操作
- stl中pair容器的用法
- STL中的容器、迭代器与算法
- 迭代器失效(1)-小心使用STL容器的erase()
- 重学C++Primer笔记10---容器常用用法总结与归纳
- STL 容器和迭代器连载1_简介
- 各容器与迭代器的用法
- STL之list容器函数用法详解
- STL — vector容器用法详解
- 泛型编程与STL--各类容器迭代器失效的场景
- 关于stl容器中迭代器的删除崩溃问题
- C++STL中vector容器 assign()函数的用法
- Map容器的用法(STL)
- C++STL总结(附带容器迭代器泛型算法详情链接【未完成】)
- STL中 vector map 等容器的内部实现 以及其 迭代器失效场景【2013.10.22】
- C/C++STL常用容器用法总结
- 【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器