没有合适的资源?快使用搜索试试~ 我知道了~
首页标准模板库STL(Standard Template Library)指南
1 介绍 1.1 动机 在七十年代末,Alexander Stepanov 第一个发现一些算法不依赖于数据结构的特定实现, 而仅仅和结构的一些基本语义属性相关。这些属性表达了一种能力,比如可以从数据结构的 一个成员取得下一个成员,从头到尾“走过”结构中的元素〔就象排序算法不关心元素是存 放在数组中或是线性表中)。Stepanov 研究过一些算法可以用一种抽象的方式实现,而且不 会影响效率。 1.2 STL 历史 1985 年,Stepanov 开发了基本Ada 库,有人要求他在C++中也这样做。但直到1987 年,模板(Template)在C++中还未实现,所以他的工作推迟了。1988 年,Stepanov 到HP 实 验室工作,并在1992 年被任命为一个算法项目的经理。在此项目中,Alexander Stepanov 和 Meng Lee 写了一个巨大的库---标准模板库(STL:Standard Template Library),意图定义一些 通用算法而不影响效率。现在STL 在国外已经成了新的编程手段。 1.3 STL 和ANSI/ISO C++草案标准 1994 年7 月14 日,ANSI/ISO C++标准化委员会将STL 采纳为草案标准。现在Microsoft Visual C++ 5.0 以上及Borland C++ 4.0 以上都支持STL。STL 已经并将继续影响软件开发的 方法,有了STL,程序员可以写更少且更快的代码,把精力集中在问题解决上,而不必关心
资源详情
资源评论
资源推荐
1
标准模板库 STL(Standard Template Library)指南
刘振飞 liuzf@pku.org.cn
1999-10-20
/ **
* 版权所有 (C) 1999-2004 刘振飞 liuzf@pku.org.cn
*
* 这一程序是自由软件,你可以遵照自由软件基金会出版的 GNU 通用公共许可证条款来修
* 改和重新发布这一程序。或者用许可证的第二版,或者 (根据你的选择)用任何更新的
* 版本。
*
* 发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含的
* 担保。更详细的情况请参阅 GNU 通用公共许可证。
*
* 你应该已经和程序一起收到一份 GNU 通用公共许可证的副本。如果还没有,写信给:
* The Free Software Foundation,Inc.,
* 675 Mass Ave,
* Cambridge, MAO2139,USA
* 还应加上如何和你保持联系的信息。
*
*
*
*
*
*
*
*
*
*
*
*
*/
2
目录
1 介绍 ...............................................................................................................................................3
1.1 动机....................................................................................................................................3
1.2 STL 历史 ............................................................................................................................3
1.3 STL 和 ANSI/ISO C++草案标准.......................................................................................3
1.4 内容安排............................................................................................................................3
2 C++基础 ........................................................................................................................................4
2.1 类........................................................................................................................................4
2.2 函数对象(Function Objects)..............................................................................................5
2.3 模板(Template)..................................................................................................................5
2.3.1 函数模板.................................................................................................................5
2.3.2 类模板.....................................................................................................................6
2.3.3 模板特化.................................................................................................................7
3 STL 概貌 .......................................................................................................................................7
3.1 STL 网上信息.....................................................................................................................8
3.2 STL 文档 ............................................................................................................................8
3.3 编译 STL 程序...................................................................................................................9
4 学习 STL ......................................................................................................................................9
4.1 容器(Container) .................................................................................................................9
4.1.1 向量(Vector)..........................................................................................................10
4.2 迭代器(Iterator) ...............................................................................................................12
4.2.1 输入和输出迭代器...............................................................................................12
4.2.2 向前迭代器...........................................................................................................13
4.2.3 双向迭代器...........................................................................................................14
4.2.4 任意存取迭代器...................................................................................................14
4.3 算法和函数对象..............................................................................................................15
4.3.1 如何创建基本算法...............................................................................................15
4.3.2 STL 算法................................................................................................................17
4.4 适应器(Adaptor)..............................................................................................................19
4.4.1 容器适应器...........................................................................................................19
4.4.2 迭代适应器...........................................................................................................20
4.4.3
函数适应器...........................................................................................................20
4.5 分配算符和内存处理......................................................................................................20
5 其余的 STL 部件 .......................................................................................................................21
5.1 各部件如何协同工作......................................................................................................21
5.2 向量(Vector).....................................................................................................................21
5.3 线性表(List).....................................................................................................................22
5.4 双向队列(Deque).............................................................................................................22
5.5 迭代标签(Iterator Tag) ....................................................................................................22
5.6 关联容器(Container) .......................................................................................................22
6 版权信息.....................................................................................................................................24
7 文献 ............................................................................................................................................24
8 后话 ............................................................................................................................................25
3
1 介绍
1.1 动机
在七十年代末,Alexander Stepanov 第一个发现一些算法不依赖于数据结构的特定实现,
而仅仅和结构的一些基本语义属性相关。这些属性表达了一种能力,比如可以从数据结构的
一个成员取得下一个成员,从头到尾“走过”结构中的元素〔就象排序算法不关心元素是存
放在数组中或是线性表中)。Stepanov 研究过一些算法可以用一种抽象的方式实现,而且不
会影响效率。
1.2 STL 历史
1985 年,Stepanov 开发了基本 Ada 库,有人要求他在 C++中也这样做。但直到 1987
年,模板(Template)在 C++中还未实现,所以他的工作推迟了。1988 年,Stepanov 到 HP 实
验室工作,并在 1992 年被任命为一个算法项目的经理。在此项目中,Alexander Stepanov 和
Meng Lee 写了一个巨大的库---标准模板库(STL:Standard Template Library),意图定义一些
通用算法而不影响效率。现在 STL 在国外已经成了新的编程手段。
1.3 STL 和 ANSI/ISO C++草案标准
1994 年 7 月 14 日,ANSI/ISO C++标准化委员会将 STL 采纳为草案标准。现在 Microsoft
Visual C++ 5.0 以上及 Borland C++ 4.0 以上都支持 STL。STL 已经并将继续影响软件开发的
方法,有了 STL,程序员可以写更少且更快的代码,把精力集中在问题解决上,而不必关心
低层的算法和数据结构了。
1.4 内容安排
第 2 部分介绍 STL 需要的 C++基础,主要是类、函数对象和模板。
第 3 部分是概貌,介绍了关键的思想。
第 4 部分 step-by-step 的教 STL。
第 5 部分介绍剩余的 STL 部分。
第 6 部分是版权信息。
第 7 部分是参考文献。
4
2 C++基础
2.1 类
请读下面一段代码:
class shape
{
private:
int x_pos;
int y_pos;
int color;
public:
shape() : x_pos(0), y_pos(0), color(1) {}
shape(int x, int y, int c = 1) : x_pos(x), y_pos(y), color(c) {}
shape(const shape& s) : x_pos(s.x_pos), y_pos(s.y_pos), color(s.color) {}
~shape() {}
shape& operator=(const shape& s)
{
x_pos = s.x_pos;
y_pos = s.y_pos;
color = s.color;
return *this;
}
int get_x_pos() { return x_pos; }
int get_y_pos() { return y_pos; }
int get_color() { return color; }
void set_x_pos(int x) { x_pos = x; }
void set_y_pos(int y) { y_pos = y; }
void set_color(int c) { color = c; }
virtual void DrawShape() {}
friend ostream& operator<<(ostream& os, const shape& s);
};
ostream& operator<<(ostream& os, const shape& s)
{
os << “shape: (“ << s.x_pos << “,” << s.y_pos << “,” << s.color << “)”;
return os;
}
5
如果你不能轻松的读懂上面的代码,或者对以下概念:
·缺省构造函数(default constructor)、拷贝构造函数(copy constructor)、析构函数(destructor)
·操作符重载(operator overloading)
·虚函数(virtual function)
·put-to 操作符(operator <<)
·友元(friend)、inline 函数
不是很熟悉的话,说明你还需要看看 C++的基础书籍。
2.2 函数对象(Function Objects)
所谓函数对象(function object)是定义了函数调用操作符(funiton-call operator,即
operator())的对象。请看下面的例子:
class less
{
public:
less(int v) : val(v) {}
int operator()(int v)
{
return v < val;
}
private:
int val;
};
声明一个 less 对象:
less less_than_five(5);
当调用 function-call operator 时,看判断出传入的参数是否小于 val:
cout << “2 is less than 5: “ << (less_than_five(2) ? “yes” : “no”);
输出是:
2 is less than 5: yes
函数对象在使用 STL 时非常重要,你需要熟悉这样的编码形式。在使用 STL 时,经常需要
把函数对象作为算法的输入参数,或着实例化一个容器(container)时的输入参数。
2.3 模板(Template)
2.3.1 函数模板
请看下面的代码:
void swap(int& a, int& b)
{
int tmp = a;
剩余24页未读,继续阅读
hu_yong
- 粉丝: 7
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1