目前位置: VCer资源中心 >>> VCer文章 >>> C++/MFC基础

[本帖已阅读1434次 分值80 回复0次] 张贴资源 发回信箱 控制面板

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

提供者:oases2008 张贴时间:2005-01-01 00:00:00.0 出处:http://www.jblook.cn 作者:不祥

stl学习笔记1(入门速览与迭代器)(2005-01-01 00:00:00.0)


oases2008


 
级别: VCer小兵
头衔: VCer会员

经验: 258
作品: 3
分会: 华北分会
注册: 2007-01-25 12:00:19.0
登录: 2007-10-30 16:38:36.0
一入门: stl速览  STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。

1.1 头文件和名字空间

为了避免和其他头文件冲突, STL的头文件不再使用常规的.h扩展。

表 1. STL头文件和容器类
#includeContainer 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()方法提供反向迭代器,以按反向顺序指定对象范围。

常量迭代器

和指针一样,你可以给一个迭代器赋值。

本文转载自IT网it求职笔试真题库网

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1000000000393.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)