C++:新概念!获取你想知道的!!

标题说明

标题党了.这次遇到的是capacity,可以获取vector和string不重新分配内存空间的话,当前容器可以保存多少元素.

不重新分配内存空间,当前容器可以保存多少元素,这个概念很重要。看图:

c++ capacity
image-2059

题目

解释下面的程序片段做了什么:

源码及解答

解答:

  • 在[1]这个地方为vector分配最少1024个空间
  • 在[2]添加元素,假如添加的元素个数是n[看下面,添加数量不一定.]个
  • 在[3]这个地方对容器的大小进行调整

可以猜一下在上面[4]和[5]要输出的值.【capacity的值完全依赖于实现,因此可能有所差异.及以下运行结果来自:gcc 4.8.2版本.】

源码1

添加数量为256个元素.

c++ running
image-2060

源码2

C++.
image-2061

源码3

源码1和2有一个共同的特点,[3]的结算结果均未超过1024.下面的会有变化.

源码4

一直在重申[capacity]的值依赖具体实现,因此可能不同平台,输出结果不同.每个vector的实现策略不同(比如gcc,ms vc),但是必须遵守一个原则:只有当迫不得已时才会分配新内存空间.

关于capacity还有很多问题值得思考,上面的程序在gcc 4.8.2上测试通过[使用C++11进行编译].

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据