vector是表示可以改变大小的array的序列容器。与array一样,vector为其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问它们的元素,并且与array中一样高效。但与array不同的是,它们的大小可以动态变化,存储由容器自动处理。在内部,vector使用一个动态分配的数组来存储它们的元素。这个array可能需要重新分配,以便在插入新元素时增加大小,这意味着需要分配一个新数组并将所有元素移动到该数组中。就处理时间而言,这是一项相对昂贵的任务,因此,在每次向容器添加元素时,vector不会重新分配。相反,vector容器可能会分配一些额外的存储空间来适应可能的增长,因此容器的实际容量可能大于包含其元素所严格需要的存储空间(即其大小)。库可以实现增长不同的策略来平衡内存使用和重新分配,但在任何情况下,重新分配应该只发生在对数生长间隔的大小,以便插入单个元素的向量可以提供平摊常数时间复杂度(见push_back方法)。因此,与数组相比,向量消耗更多的内存以换取管理存储和高效动态增长的能力。与其他动态序列容器(deques、lists和forward_lists)相比,vector访问其元素的效率非常高(就像数组一样),从其末尾添加或删除元素的效率也相对较高。对于涉及在末尾位置插入或删除元素的操作,它们的性能比其他操作差,而且迭代器和引用的一致性不如list和forward_lists。
STL之vector
最新推荐文章于 2024-04-22 22:41:56 发布