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.5 赋值

我们可以用几种不同的方法实现向量的赋值。例如,我们可以仅在涉及的两个向量具有相同数量的元素时才判定赋值是合法的。但是,在13.3.2节中,我们决定向量赋值应具有更为通用的可能也是最为明显的意义:当赋值v1=v2完成后,向量v1应该是向量v2的一个副本。例如:

显然,我们需要拷贝元素,那么空闲空间怎么处理呢?我们是否“拷贝”尾部的“空闲空间”?答案是否定的:新的vector将会获得元素的副本,但我们完全不了解新vector将被如何使用,因此我们无须为尾部的空闲空间操心:

最简单的实现包括如下操作:

·为副本分配存储空间。

·拷贝元素。

·释放原有已分配的空间。

·将sz、elem、space设置为新值。

如下所示:

作为惯例,赋值运算符将返回被赋值对象的引用。符号*this的含义参见12.10节。

上述实现是正确的,但通过观察我们可以发现上述实现包含了大量多余的存储空间分配和释放操作。如果被赋值vector的大小大于赋值对象会如何?如果被赋值vector的大小等于赋值对象会如何?在很多应用中,最后一种情况是十分常见的。在两种情况下,我们都只需将元素拷贝至目标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