August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
在14.1节中,我们展示了实现容器大小改变的最简单的策略:为新的元素数量分配内存空间,并将原有元素拷贝至新的空间中。然而,如果我们需要经常调整大小,那么这一策略非常低效。在实际中,如果我们改变了容器的大小,通常随后还会多次改变。特别是,我们很少只进行一次push_back()。因此,我们可以针对这种预期来优化程序。实际上,所有vector实现都会记录元素数目和为“未来扩展”预留的“空闲空间”量。例如:
上述内容可图示如下:
由于我们从0开始为元素计数,因此sz(元素数量)指向最后一个元素之后的位置,而space指向最后一个已分配单元之后的位置。图中的指针实际指示的是elem+sz和elem+space。
当最初构造一个vector对象时,space==sz;即没有“空闲空间”:
我们不会分配额外的空间,直到我们开始改变元素数目为止。一般而言,space==sz,因此没有额外的内存开销,除非我们使用push_back()。
默认构造函数(创建一个空vector)将整数成员设置为0,将指针成员设置为nullptr: ...
Read now
Unlock full access