没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
简介,标准模板库
作者:
这篇文章是关于 语言的一个新的扩展——标准模板库的(
),也叫 。
当我第一次打算写一篇关于 的文章的时候,我不得不承认我当时低估了
这个话题的深度和广度。有很多内容要含盖,也有很多详细描述 的书。因
此我重新考虑了一下我原来的想法。我为什么要写这篇文章,又为什么要投稿
呢?这会有什麽用呢?有再来一篇关于 的文章的必要吗?
当我翻开 的页时,我看到了编程时代在我面前消融。我
能看到深夜消失了, 目标软件工程出现了。我看到了可维护的代码。一年过去
了,我使用 写的软件仍然很容易维护。 让人吃惊的是其他人可以没有我而
维护的很好!
然而,我也记得在一开始的时候很难弄懂那些技术术语。一次,我买了
,每件事都依次出现,但是在那以前我最渴望得到的东西是一
些好的例子。
当我开始的时候,作为 一部分的 还没出来,它覆盖了
。
因此我想写一篇关于一个 程序员的真实生活的文章可能会有用。如果我
手上有一些好的例子的话,特别是象这样的新题目,我会学的更快。
另外一件事是 应该很好用。因此,理论上说,我们应该可以马上开始使
用 。
什麽是 呢? 就是 ,标准模板库。这
可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说, 是一
些“容器”的集合,这些“容器”有 !"!! 等, 也是算法和其他
一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年
的杰作。
的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用
这些现成的组件。 现在是 的一部分,因此不用额外安装什麽。它被内
建在你的编译器之内。因为 的 是一个简单的容器,所以我打算从它开
始介绍 如何使用。如果你懂得了这个概念,其他的就都没有问题了。另外 ,
容器是相当简单的,我们会看到这一点。
这篇文章中我们将会看到如何定义和初始化一个 ,计算它的元素的数量,
从一个 里查找元素,删除元素,和一些其他的操作。要作到这些,我们将
会讨论两个不同的算法, 通用算法都是可以操作不止一个容器的,而
的成员函数是 容器专有的操作。
这是三类主要的 组件的简明纲要。 容器可以保存对象,内建对象和
类对象。它们会安全的保存对象,并定义我们能够操作的这个对象的接口。放
在蛋架上的鸡蛋不会滚到桌上。它们很安全。因此,在 容器中的对象也很
安全。我知道这个比喻听起来很老土,但是它很正确。
算法是标准算法,我们可以把它们应用在那些容器中的对象上。这些算
法都有很著名的执行特性。它们可以给对象排序,删除它们,给它们记数,比
较,找出特殊的对象,把它们合并到另一个容器中,以及执行其他有用的操作。
就象是容器中指向对象的指针。 的算法使用 在容
器上进行操作。# 设置算法的边界 ,容器的长度,和其他一些事情。举
个例子,有些 仅让算法读元素,有一些让算法写元素,有一些则两者
都行。 # 也决定在容器中处理的方向。
你可以通过调用容器的成员函数 $%&来得到一个指向一个容器起始位置
的 。你可以调用一个容器的 %&函数来得到过去的最后一个值(就
是处理停在那的那个值)。
这就是 所有的东西,容器、算法、和允许算法工作在容器中的元素上的
。 算法以合适、标准的方法操作对象,并可通过 得到容器精
确的长度。一旦做了这些,它们就在也不会“跑出边界”。 还有一些其他的对这
些核心组件类型有功能性增强的组件,例如函数对象。我们将会看到有关这些
的例子,现在 ,我们先来看一看 的 。
定义一个 list
我们可以象这样来定义一个 STL 的 list:
'($)
'()
%"&*
($)++,
-
这就行了,你已经定义了一个 list。简单吗?list<string> Milkshakes 这句是你声明了
list<string>模板类 的一个实例,然后就是实例化这个类的一个对象。但是我们别急着做这
个。在这一步其实你只需要知道你定义了 一个字符串的 list。你需要包含提供 STL list 类的
头文件。我用 gcc 2.7.2 在我的 Linux 上编译这个测试程序,例如:
$./.
注意 iostream.h 这个头文件已经被 STL 的头文件放弃了。这就是为什么这个例子中没有
它的原因。
现在我们有了一个 ,我们可以看实使用它来装东西了。我们将把一个字
符串加到这个 里。有一个非常 重要的东西叫做 的值类型。值类型就是
中的对象的类型。在这个例子中!这个 的值类型就是字符串!$,
这是因为这个 用来放字符串。
I 使用 list 的成员函数 push_back 和 push_front 插入一个元素到 list 中
'($)
'()
'
%"&*
($)++,
++0+%11&,
++0+%11&,
++02%11&,
++02%131&,
-
We now have a list with four strings in it. The list member function push_back() places an object
onto the back of the list. The list member function push_front() puts one on the front. I often
push_back() some error messages onto a list, and then push_front() a title on the list so it prints
before the error messages. 我们现在有个 4 个字符串在 list 中。list 的成员函数 push_back()把
一个对象放到一个 list 的后面,而 push_front()把对象放到前面。我通常把一些错误信息
push_back()到一个 list 中去,然后 push_front()一个标题到 list 中, 这样它就会在这个错误
消息以前打印它了。
The list member function empty()list 的成员函数 empty()
知道一个 list 是否为空很重要。如果 list 为空,empty()这个成员函数返回真。 我通常会
这样使用它。通篇程序我都用 push_back()来把错误消息放到 list 中去。然后,通过调用
empty() 我就可以说出这个程序是否报告了错误。如果我定义了一个 list 来放信息,一个放
警告,一个放严重错误, 我就可以通过使用 empty()轻易的说出到底有那种类型的错误发
生了。
我可以整理这些 ,然后在打印它们之前,用标题来整理它们,或者把它们
排序成类。
这是我的意思:
4
556$+$$
4
'()
'($)
'()
'
%"&*
'789:
'7#;8.
'7<=>;#;?@
'
0,
'
($)#2$,
($)<$$,
'
$$$"
#2$0+%1#2A$1&,
+
<$$0+%1<$;"
21&,
+
'
0B89,
'
2%C#2$%&&*2$
#2$02%1#2$1&,
2$!D
0B#;8,
-
'
2 %C<$$%&& * $
$
<$$02%1<$$1&,
$$!D
0B<=>;#;?,
-
'
#2$
2%#2$%& <$$%&&*
((1$1((,
-
'
0,
-
用 for 循环来处理 list 中的元素
我们想要遍历一个 list,比如打印一个中的所有对象来看看 list 上不同操作的结果。要一
个元素一个元素的遍历一个 list, 我们可以这样做:
4
55E2<C
4
'()
'($)
'()
'
%"&*
($)++,
($)++#,
'
++0+%11&,
++0+%11&,
++02%11&,
++02%131&,
'
++
++02%1++1&,
++0+%14444441&,
2%++#B++$%&,
++#CB++%&,
++#&*
2$
((4++#((,
-
-
这个程序定义了一个 iterator,MilkshakeIterator。我们把它指向了这个 list 的第一个元素。
这可以调用 Milkshakes.begin()来作到,它会返回一个指向 list 开头的 iterator。然后我们把
它和 Milkshakes.end()的 返回值来做比较,当我们到了那儿的时候就停下来。
剩余25页未读,继续阅读
资源评论
- haha_00112013-02-18很好 的资源,谢谢分享
- abarrggagatgr2014-04-01很不错的资源,谢谢你的分享
sdytdhl
- 粉丝: 22
- 资源: 94
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功