Vector 增长变化

VS 2019 亲测 ,绝对详细。

    std::vector<char> v6;
    auto v6_capacity = v6.capacity();
    std::cout << "[V6]:" << std::endl;
    std::cout << "Size:" << v6.size() << "  MaxSize" << v6.max_size() << std::endl;
    std::cout << "Capacity:" << v6.capacity() << std::endl;
    for (int i = 0; i < 1000; i++)
    {
        v6.push_back('1'); //capacity 1, size 1, add allocator 1
        if (v6.capacity() - v6_capacity)
        {
            std::cout << "Size:" << v6.size() << std::endl;
            std::cout << "Capacity:" << v6.capacity() << std::endl;
            std::cout << "add allocated apacity:" << v6.capacity() - v6_capacity << std::endl << std::endl;
        }
        v6_capacity = v6.capacity();
    }
[V6]:
Size:0  MaxSize2147483647
Capacity:0
Size:1
Capacity:1
add allocated apacity:1

Size:2
Capacity:2
add allocated apacity:1

Size:3
Capacity:3
add allocated apacity:1

Size:4
Capacity:4
add allocated apacity:1

Size:5
Capacity:6
add allocated apacity:2

Size:7
Capacity:9
add allocated apacity:3

Size:10
Capacity:13
add allocated apacity:4

Size:14
Capacity:19
add allocated apacity:6

Size:20
Capacity:28
add allocated apacity:9

Size:29
Capacity:42
add allocated apacity:14

Size:43
Capacity:63
add allocated apacity:21

Size:64
Capacity:94
add allocated apacity:31

Size:95
Capacity:141
add allocated apacity:47

Size:142
Capacity:211
add allocated apacity:70

Size:212
Capacity:316
add allocated apacity:105

Size:317
Capacity:474
add allocated apacity:158

Size:475
Capacity:711
add allocated apacity:237

Size:712
Capacity:1066
add allocated apacity:355

刚刚做了一个实验,有人说是增长50%。但是!!!重点来了。具体多少可以自己算,毕竟标准库没有规定,VS2019的capacity增长结果来看:
+1(0.5进位 多计算0.5)A
+1(0.5舍去不进位 补回0.5)B
+1(0.5进位 多计算0.5)A
+1(0.5舍去不进位 补回0.5)B
+2(1整除) 0
+3(1.5进位 多计算0.5) A
+4(整除)
+6(整除)
+9(不进位 补回0.5) B
+14(整除)
+21(进位 多计算0.5) A
+31(不进位 补回0.5) B
+47(进位 多计算0.5) A
+70(整除)
+105(不进位 补回0.5) B
+158(整除)
+237(进位 多计算0.5) A
+355(不进位 补回0.5) B
. 如果前一次4舍5入进位后,下次就4舍5不入,不进位。

为什么要在意这个增长速度呢?

当Vector里面放的东西足够多,足够大时。就会影响效率。
因为Vector 每次增长,会创建一个新的 Vector也就是增长大小以后的Vector,然后会把所有东西都copy过去。然后清除原来的。这样就会造成很多很多次copy,如果是对象会进入多次拷贝构造。
当然如果自定义类型是支持移动构造函数的化,vector的copy会优先使用移动构造来交换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值