📜  C++ Vector中capacity与size

📅  最后修改于: 2020-09-04 08:57:58             🧑  作者: Mango

std :: vector在堆上分配一个内存,并将其所有元素存储在连续的内存位置。

但是,如果最初分配的内存被完全填满怎么办?
例如,让我们创建一个整数向量,即std :: vector 。现在假设它的初始容量是存储10个元素,但是在我们的应用程序中,我们想在其中存储15个元素。那么当我们插入第11个元素时会发生什么?

当std :: vector的内部存储器完全完成时,它将增加其存储器的大小。为此,它执行以下步骤,

  • 它将在堆上分配更大的内存块,即几乎是先前分配的大小的两倍。
  • 然后将所有元素从旧的存储位置复制到新的位置。是的,它会复制它们,因此,如果我们的元素是用户定义的对象,则将调用其复制构造函数。这使得此步骤在速度方面相当繁重。
  • 成功复制后,它将删除旧的内存。

您可以使用Capacity()成员函数检查向量的当前容量,即它可以在当前分配的内存中存储多少元素。
要检查std :: vector中当前存储的元素数,可以使用size()成员函数。

#include 
#include 
struct Sample
{
    Sample(){}
    Sample(const Sample & obj)
    {
        std::cout<<"Sample copy constructor"< vecOfInts;
    std::cout<<"Capacity :: "<

输出打印如下:

Capacity :: 0
Size :: 0
Sample copy constructor
Capacity :: 1
Size :: 1
Sample copy constructor
Sample copy constructor
Capacity :: 2
Size :: 2