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

文章目录

  • 1、内存申请机制/内部存储原理
  • 2、示例

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 
#include 

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

你可能感兴趣的:(C++,c++,开发语言)