list是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。
跟vector,string等不同,以vector为例,vector中所存放的元素是按照顺序连续存储的,每个元素紧挨着前一个元素。所以在往vector中添加新的元素时,如果我们没有预先给定足够的空间存放新的元素,容器就不能像list那样简单地将新元素添加到内存中,而是必须重新分配新的内存空间来保存已有元素和新元素,即:将已有元素转移到新开辟的空间,然后添加新元素,再释放旧空间。这样的操作会导致每次添加新元素都要执行一个内存分配和释放,严重影响性能。为了解决这个问题,所以采用了提前预留内存空间的方法,就不需要每次添加新元素都要重新分配内存空间了。
c++ list 为什么没有capacity成员函数
最新推荐文章于 2024-02-27 14:22:08 发布