Skip to Main Content
C++程序设计:原理与实践(进阶篇)(原书第2版)
book

C++程序设计:原理与实践(进阶篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced content levelIntermediate to advanced
450 pages
10h 35m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(进阶篇)(原书第2版)

27.9 实例:侵入式容器

C++标准库容器(如vector和map)是非侵入式容器(non-intrusive container),即它们不要求容器内的数据以单个元素的形式被访问,而是对容器整体进行操作。这也是它们为什么有那么好的通用性——适用于所有内置类型和用户自定义类型,只要类型支持拷贝操作即可。另外一类容器被称为侵入式容器(intrusive container),在C和C++中都很常用。下面我们将通过一个非侵入式的容器来说明C风格struct、指针和动态内存分配的使用。

我们可以定义一个支持如下九个操作的双向链表:

基本设计思路是使用户只需提供List*和Link*指针就能完成这些操作。这意味着可以大幅修改这些操作的实现,而无须修改用户程序。显然,我们在命名上受到了STL的影响。List和Link显然可以简单定义如下:

下面是List的图示:

我们目的不是介绍高明的描述技术或者高明的算法,因此本节并未展示这些。但是,请注意程序中并未提及Link所保存的数据(List中的元素)。回过头看一下程序,我们发现Link和List非常像抽象类。Link保存的数据会随后提供。Link*和List*有时被称为不透明类型处理工具,即我们可以在不了解Link和List的内部结构的情况下,使用Link*和List*来处理List中的元素。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

JAVASCRIPT之美|聽頂尖程式設計師闡述他們的思維

JAVASCRIPT之美|聽頂尖程式設計師闡述他們的思維

Anton Kovalyov
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉
C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普

Publisher Resources

ISBN: 9787111562528