stl学习笔记1(入门速览与迭代器)

 入门: stl速览

  STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。

1.1 头文件和名字空间
为了避免和其他头文件冲突, STL的头文件不再使用常规的.h扩展。
1. STL 头文件和容器类
#include
Container Class
<deque>
deque
<list>
list
<map>
map, multimap
<queue>
queue, priority_queue
<set>
set, multiset
<stack>
stack
<vector>
vector, vector<bool>
 
为了使用STL,可以将下面的指示符插入到你的源代码文件中,典型地是在所有的#include指示符的后面:using namespace std;
1.2 六大组件
1)     迭代器提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象。
2) 容器是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器。
3) 算法是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用。
            以下是六大组件列表说明:

组件英文名
组件中文名
含义
备注
iterators
迭代器
泛型指针
 
containers
容器
就是数据结构,用来存放元素
 
algorithms
算法
就是算法
 
function object
函数对象
一种行为类似函数的东西
 
allocators
配置器
用来分配内存空间
这一特性很多编译器不是很支持,建议使用默认值
adapters
适配器
用来修饰其它组件
可参考设计模式中的 adapter

 
2 组件一:迭代器描述
2.1 迭代器的类型
对于STL数据结构和算法,你可以使用五种迭代器。下面简要说明了这五种类型:
·         Input iterators 提供对数据的只读访问。
·         Output iterators 提供对数据的只写访问
·         Forward iterators 提供读写操作,并能向前推进迭代器。
·         Bidirectional iterators 提供读写操作,并能向前和向后操作。
·         Random access iterators 提供读写操作,并能在数据中随机移动。
尽管各种不同的STL实现细节方面有所不同,还是可以将上面的迭代器想象为一种类继承关系。从这个意义上说,下面的迭代器继承自上面的迭代器。由于这种继承关系,你可以将一个Forward迭代器作为一个output或input迭代器使用。
下面是各种iterator类型之间的关系列图:
input iterators         output iterators
            /             /
             forward iterators
                   |
             bidirectional iterators
                        |
             random access iterators
指针迭代器
正如下面的小程序显示的,一个指针也是一种迭代器。该程序同样显示了STL的一个主要特性——它不只是能够用于它自己的类类型,而且也能用于任何C或C++类型。
容器迭代器
尽管C++指针也是迭代器,但用的更多的是容器迭代器。容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象。两个典型的容器类方法是begin()和end()。它们在大多数容器中表示整个容器范围。其他一些容器还使用rbegin()和rend()方法提供反向迭代器,以按反向顺序指定对象范围。
常量迭代器
和指针一样,你可以给一个迭代器赋值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值