【C++】vector的内存申请机制/内部存储原理

1、内存申请机制/内部存储原理

  • vector是C++的STL库中的动态数组容器,可以自动地动态调整大小以适应存储的元素数量变化。
  • 内存申请机制大致可以描述为:

1)初始分配:当创建一个空的 vector 对象时,它会分配一块初始大小的内存空间,通常为 0 或者一个默认预设大小(如 16)。
2)容量管理:vector会维护一个capacity变量,表示的是vector的容量大小,即表示已分配的内存空间大小。注意,这个内存空间是连续的,也就是说vector的元素在内存中是连续存储的,访问效率会更高
3)扩容方式:如果 vector 现有空间已存满元素,在 使用push_back 新增数据的时候就会执行以下过程:分配一块更大的内存;将原来的数据 copy 过来,同时释放之前的内存;再在新的内存空间中存入新增的元素。

2、示例

  • 可以通过以下代码来观察vector的内存申请机制和内部存储原理:

1)size():size() 方法返回当前 vector 中的元素数量。在开始时,vec 的 size() 为 0。每次调用 push_back() 添加元素后,size() 逐渐增加。
2)capacity():capacity() 方法返回 vector 当前可容纳的元素数量。在开始时,vec 的 capacity() 为 0。随着元素的添加,capacity() 会以2倍的扩容方式以适应元素的数量。

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec; // 创建一个空的 vector 对象

    cout << "初始状态:" << endl;
    cout << "Size: " << vec.size() << endl;
    cout << "Capacity: " << vec.capacity() << endl;

    for (int i = 0; i < 10; ++i) {
        vec.push_back(i); // 添加元素到 vector

        cout << "添加元素 " << i << " 后:" << endl;
        cout << "Size: " << vec.size() << endl;
        cout << "Capacity: " << vec.capacity() << endl;
    }

    return 0;
}

  • 输出为:
初始状态:
Size: 0
Capacity: 0
添加元素 0 后:
Size: 1
Capacity: 1
添加元素 1 后:
Size: 2
Capacity: 2
添加元素 2 后:
Size: 3
Capacity: 4
添加元素 3 后:
Size: 4
Capacity: 4
添加元素 4 后:
Size: 5
Capacity: 8
添加元素 5 后:
Size: 6
Capacity: 8
添加元素 6 后:
Size: 7
Capacity: 8
添加元素 7 后:
Size: 8
Capacity: 8
添加元素 8 后:
Size: 9
Capacity: 16
添加元素 9 后:
Size: 10
Capacity: 16
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值