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

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

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced content levelIntermediate 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.
Start your free trial

You might also like

Java并发编程实战

Java并发编程实战

Brian Goetz, Tim Peierls
C++语言导学(原书第2版)

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

本贾尼 斯特劳斯特鲁普
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉
可编程网络自动化

可编程网络自动化

Jason Edelman, Scott S. Lowe, Matt Oswalt

Publisher Resources

ISBN: 9787111544395