C++ 可以计算出std::vector扩展其数组大小的频率吗?

C++ 可以计算出std::vector扩展其数组大小的频率吗?,c++,vector,C++,Vector,我在胡思乱想,想弄明白std::vector是如何管理其底层数组的大小的。我知道它会进行某种大小调整,例如,当调用尝试在基础数组已满时添加元素时,创建一个新数组,其大小是前一个数组的两倍,并将旧值复制到该数组中或类似的内容 所以我就这么做了 #include <iostream> #include <vector> int main() { std::vector<int> myVec; for (int i = 1; i < 1000

我在胡思乱想,想弄明白std::vector是如何管理其底层数组的大小的。我知道它会进行某种大小调整,例如,当调用尝试在基础数组已满时添加元素时,创建一个新数组,其大小是前一个数组的两倍,并将旧值复制到该数组中或类似的内容

所以我就这么做了

#include <iostream>
#include <vector>

int main()
{

   std::vector<int> myVec; 
   for (int i = 1; i < 10000; ++i)
   {
      myVec.push_back(i);
      std::cout << i << " elements in vector; size of vector is " << sizeof(myVec) << " bytes." << std::endl;
   }
   return 0;
}

我意识到这是因为我在看向量的大小,它包含一个指向底层数组的指针,因此向量的大小不包括底层数组的大小。考虑到我看不到任何可以直接访问底层数组的地方,我该如何做我想做的事情呢?我真正想做的就是看到,当元素逐个添加时,底层数组的大小是如何周期性地增加的。

您应该改为检查myVec.capacity。

当您将一个值推送到向量时,它的大小会增加一个。当大小达到矢量容量时,将分配更多内存,容量将加倍

您可以通过调用myVec.capacity来检查容量。因此,为了找出分配了多少内存,您可以执行以下操作:

myVec.capacity() * sizeof(int)

使用.capacity获取向量调整大小之前可以存储的元素数。如果我不得不猜测的话,大多数向量实现都使用加倍策略:每次空间用完时,向量的容量就会加倍。这确保了分摊的O1插入时间。@Hillary Rodham Clinton请显示所有的程序输出。:小题大做:增加向量的容量不一定会使容量增加一倍,尽管这在实践中是一种相当常见的策略。
myVec.capacity() * sizeof(int)