Skip to Content
C++程序设计语言(第4部分:标准库)(原书第4版)
book

C++程序设计语言(第4部分:标准库)(原书第4版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
6h 57m
Chinese
Pearson
Content preview from C++程序设计语言(第4部分:标准库)(原书第4版)

31.4 容器

本节继续深入讨论一些细节:

·vector及其构造函数(见31.4.1节)。

·链表:list和forward_list(见31.4.2节)。

·关联容器,如map和unordered_map(见31.4.3节)。

31.4.1 vector

STL的vector是默认容器——除非你有充分理由,否则应该使用它。如果你希望使用链表或内置数组替代vector,应慎重考虑后再做决定。

31.3节介绍了vector上的操作,并隐含地与其他容器上的操作进行了对比。但是,在了解了vector的重要性之后,本节继续深入讨论它,重点介绍其操作是如何实现的。

vector的模板参数和成员类型定义如下:

31.4.1.1 vector和增长

考虑一个vector对象的内存布局(如13.6节所述):

使用大小(元素数目)和容量(不重新分配空间的前提下可容纳的元素数目)令push_back()操作时的向量增长相当高效:不会在添加每个元素时都分配内存,而是在超出容量时才进行一次重新分配(见13.6节)。C++标准并未指定超出容量时向量的增长幅度,但很多C++实现都是增加大小的一半。曾经有一段时间,当读取输入存入一个vector时,我总是注意使用reserve()。但我惊讶地发现,基本上所有情况下,调用reserve()都不会带来可测量的性能变化。默认的增长策略与我自己预测分配做得一样好,因此我就停止使用reserve()来提高性能了。取而代之,我用它来提高重分配延迟的可预测性以及避免指针和迭代器失效。 ...

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

算法精讲视频课程:24篇系列讲座

算法精讲视频课程:24篇系列讲座

罗伯特·塞奇威克, 凯文·韦恩(Kevin Wayne)
可编程网络自动化

可编程网络自动化

Jason Edelman, Scott S. Lowe, Matt Oswalt
C语言核心技术(原书第2版)

C语言核心技术(原书第2版)

Peter Prinz, Tony Crawford
Go程序设计语言

Go程序设计语言

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

Publisher Resources

ISBN: 9787111544395