vector的动态内存扩容机制

本文探讨了vector在C++中如何处理内存扩容,重点比较了GCC、CLANG和MSVC编译器在size达到capacity时的不同扩容策略,以及这种变化对迭代器的影响。通过实例展示了扩容机制及编译器间的差异。
摘要由CSDN通过智能技术生成

vector的动态内存扩容机制

参考

不同编译器扩容倍数不同

当size == capacity时,如果进行插入操作(insert, push_back, emplace_back等),就会导致扩容

此时原vector中的所有迭代器都失效

测试程序:

#include<iostream>
#include<vector>
using namespace std;

int main(){
	vector<int> v(10);
	cout << v.data() << endl;
	cout << v.capacity() << endl;
	
	v.push_back(0);
	cout << v.data() << endl;
    //gcc编译器下,capacity变为原来2倍,也就是20
    
    //其他两个编译器下输出capacity变为原来1.5倍,也就是15
	cout << v.capacity() << endl;
}

GCC编译器:

在线C++ GCC编译器

容量不够时,新开辟一块原来空间2倍的内存,然后将原来的数据都复制过去image-20220817210924059

CLANG和MSVC都是1.5倍扩容(vs2017编译器是MSVC)

image-20220817210957756

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值