vs的vector容量分配

之前看stl源码书里说到,
vector的容量不足时会两倍两倍地增长,
用dev c++做实验时也确实是2倍,
但是用vs做实验却是1.5倍。
想起了之前虎牙面试的时候面试官有问过容量怎么重新分配,我说是2倍,面试官说不一定。
百度了一下说在linux下也是2倍(没有实践),应该是不同环境的实现版本不一样。

下面是代码:

	vector<int> Vec;
	cout << "initial size: " << Vec.size() << endl;
	cout << "initial capacity: " << Vec.capacity() << endl;
	cout << Vec.max_size() << endl;

	//随便取的,就是做循环
	int num = 4;
	for (int i = 0; i < 10; i++)
	{
		num *= 5;
		int count = num;
		int lastCapacity = Vec.capacity();
		while (count--)
		{
			Vec.push_back(num);
			if (Vec.capacity() != lastCapacity)
			{
				lastCapacity = Vec.capacity();
				cout << "size: " << Vec.size() << endl;
				cout << "capacity: " << lastCapacity << endl;
			}
		}
	}

VS的运行结果:可以看到容量重新分配不是2倍,是1.5倍

initial size: 0
initial capacity: 0
1073741823
size: 1
capacity: 1
size: 2
capacity: 2
size: 3
capacity: 3
size: 4
capacity: 4
size: 5
capacity: 6
size: 7
capacity: 9
size: 10
capacity: 13
size: 14
capacity: 19
size: 20
capacity: 28
size: 29
capacity: 42
size: 43
capacity: 63
size: 64
capacity: 94
size: 95
capacity: 141
size: 142
capacity: 211
size: 212
capacity: 316
size: 317
capacity: 474
size: 475
capacity: 711
size: 712
capacity: 1066
size: 1067
capacity: 1599
size: 1600
capacity: 2398
size: 2399
capacity: 3597
size: 3598
capacity: 5395
size: 5396
capacity: 8092
size: 8093
capacity: 12138
size: 12139
capacity: 18207
size: 18208
capacity: 27310
size: 27311
capacity: 40965
size: 40966
capacity: 61447
size: 61448
capacity: 92170
size: 92171
capacity: 138255
size: 138256
capacity: 207382
size: 207383
capacity: 311073
size: 311074
capacity: 466609
size: 466610
capacity: 699913
size: 699914
capacity: 1049869
size: 1049870
capacity: 1574803
size: 1574804
capacity: 2362204
size: 2362205
capacity: 3543306
size: 3543307
capacity: 5314959
size: 5314960
capacity: 7972438
size: 7972439
capacity: 11958657
size: 11958658
capacity: 17937985
size: 17937986
capacity: 26906977
size: 26906978
capacity: 40360465
size: 40360466
capacity: 60540697

dev c++的运行结果:重新分配的容量是上一次的2倍

initial size: 0
initial capacity: 0
1073741823
size: 1
capacity: 1
size: 2
capacity: 2
size: 3
capacity: 4
size: 5
capacity: 8
size: 9
capacity: 16
size: 17
capacity: 32
size: 33
capacity: 64
size: 65
capacity: 128
size: 129
capacity: 256
size: 257
capacity: 512
size: 513
capacity: 1024
size: 1025
capacity: 2048
size: 2049
capacity: 4096
size: 4097
capacity: 8192
size: 8193
capacity: 16384
size: 16385
capacity: 32768
size: 32769
capacity: 65536
size: 65537
capacity: 131072
size: 131073
capacity: 262144
size: 262145
capacity: 524288
size: 524289
capacity: 1048576
size: 1048577
capacity: 2097152
size: 2097153
capacity: 4194304
size: 4194305
capacity: 8388608
size: 8388609
capacity: 16777216
size: 16777217
capacity: 33554432
size: 33554433
capacity: 67108864
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值