#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v;
auto vsize = v.capacity();
for (int tmp = 0; tmp < 1000;tmp++)
{
v.push_back(tmp);
if(vsize!=v.capacity())
{
vsize = v.capacity();
cout << "capacity changed : " << vsize << endl;
}
}
return 0;
}
vector的容量应该是之前的两倍,为什么MSVC不能用于此?
答案 0 :(得分:6)
vector的容量应该是之前的两倍,为什么MSVC不能在此工作?
你从哪里得到的?
这是特定于实现的行为。标准中没有任何内容在调用capacity()
之后push_back()
应该如何更改,除此之外必须保证std::vector
(不是 double >比之前分配的空间。
答案 1 :(得分:1)
vector的容量应该是之前的双倍
那是错的。唯一的要求是vector::push_back
执行摊销的O(1)副本。这可以通过每次需要重新分配时将容量乘以常数因子来实现 - 但该常数不必是2(它必须大于1)。 GCC使用2,MSVC使用3/2。 (后者的优点是它占用的空间更少,代价更多)
答案 2 :(得分:0)
&#34;向量的容量应该是之前的双倍&#34;。不,不应该。 std::vector
增加容量的方式和数量是实现定义的。
这意味着每个实现都可以自由地执行。它可以使尺寸加倍,增加2倍,增加10倍或者其他。从您的角度来看,作为容器的用户,您无法知道,也不应该关心。