容量(Capacity)与大小(Size)
- Size:表示容器当前存储的元素数量。调用 clear() 后,大小将变成 0。
- Capacity:表示容器在不需要重新分配内存的情况下,最大能存放的元素数量。调用 clear() 不会一般更改容量。
- 对于vector,list,deque ,一般容量不变
- 对于map,set,容量的概念并不适用于这些容器,因为它们通常不按需预分配空间
拿vector来说:
clear()函数的作用:清空容器,存储元素数目变为0,但是容量一般不变。
#include <iostream>
#include <vector>using namespace std;int main() {vector<int>v = { 1,2,3,4,5 };cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;for (int i = 0; i < v.size(); i++) {cout << v[i] << " ";}cout << endl;//清空容器,size=0, 但是不释放空间v.clear();cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;for (int i = 0; i < v.size(); i++) {cout << v[i] << endl;}//重新插入元素,size=1, capacity=5(此时v相当于定义的vector<int>v)v.push_back(1);cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;for (int i = 0; i < v.size(); i++) {cout << v[i] << endl;}//清空容器后释放内存v.shrink_to_fit(); // 可以减小capacity到size cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;return 0;
}
输出:
Size: 5, Capacity: 5
1 2 3 4 5
Size: 0, Capacity: 5
Size: 0, Capacity: 0
证明clear后,数组被清空,长度变为0,但是容量不变
使用shrink_to_fit后,数组被清空,同时容量也为0(空间被释放)