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

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

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

12.2 vector的基本知识

我们开始循序渐进地设计vector,首先考虑一个非常简单的应用:

显然,我们创建一个有4个double类型元素的vector,并且分别为这四个元素赋值0.33、22.0、27.2与54.2。这四个元素被编号为0、1、2与3。C++标准库容器中的元素编号总是从0(零)开始。从0开始编号是很常见的,它是C++程序员的一个通用规范。一个vector中的元素数量被称为它的大小。因此,age的大小为4。一个vector中的元素被编号(索引)为0到size-1。例如,age中的元素被编号为0到age.size()-1。我们可图示age如下:

如何在计算机内存中实现这种“图解设计”?如何像这样储存和访问值呢?显然,我们需要定义一个类,并且将这个类称为vector。另外,它需要一个数据成员保存它的大小,以及另一个数据成员保存它的元素。但是,如何表示一个大小可变的元素集合?可以使用标准库vector,但(在此情境下)这是一种欺骗:我们正在构建一个vector!

那么,如何表示上图中的箭头?先不考虑它,我们可以定义一个固定大小的数据结构:

忽略符号表示方面的细节,我们将得到如下所示的图:

此定义简单合用,但我们第一次尝试用push_back()添加元素时就遇到了问题:无法添加元素;程序中的元素数量固定为4个。我们需要一个比保存固定数量元素的数据结构更强大的东西。因为如果我们将vector定义为保存固定数量的元素,那么改变元素数量的操作如push_back()就无法实现了。基本上,我们需要一个数据成员来指向一组元素,这样,当需要更大空间时可以令它指向另一组元素。这个数据成员可能是第一个元素的内存地址这样的东西。在C++中,一种可以保存地址的数据类型称为指针(pointer),它在语法上使用后缀*来区分,因此double*表示“指向double的指针”。这样,我们就可以定义自己的第一个版本的vector类了: ...

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

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

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

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252