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版)

14.2.1 表示方式

在14.1节中,我们展示了实现容器大小改变的最简单的策略:为新的元素数量分配内存空间,并将原有元素拷贝至新的空间中。然而,如果我们需要经常调整大小,那么这一策略非常低效。在实际中,如果我们改变了容器的大小,通常随后还会多次改变。特别是,我们很少只进行一次push_back()。因此,我们可以针对这种预期来优化程序。实际上,所有vector实现都会记录元素数目和为“未来扩展”预留的“空闲空间”量。例如:

上述内容可图示如下:

由于我们从0开始为元素计数,因此sz(元素数量)指向最后一个元素之后的位置,而space指向最后一个已分配单元之后的位置。图中的指针实际指示的是elem+sz和elem+space。

当最初构造一个vector对象时,space==sz;即没有“空闲空间”:

我们不会分配额外的空间,直到我们开始改变元素数目为止。一般而言,space==sz,因此没有额外的内存开销,除非我们使用push_back()。

默认构造函数(创建一个空vector)将整数成员设置为0,将指针成员设置为nullptr: ...

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.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

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

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

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

管理Kubernetes

Brendan Burns, Craig Tracey
Python编程入门与实战

Python编程入门与实战

Posts & Telecom Press, Fabrizio Romano

Publisher Resources

ISBN: 9787111562252