http://blog.sina.com.cn/s/blog_5413483701016413.html
在Vector容器中有以下几个关于大小的函数
方法 | 效果 |
size() | 返回容器的大小 |
empty() | 判断容器是否为空 |
max_size() | 返回容器最大的可以存储的元素 |
capacity() | 返回容器当前能够容纳的元素数量 |
Vector的容量之所以重要,有以下两个原因:
1. 容器的大小一旦超过capacity的大小,vector会重新配置内部的存储器,导致和vector元素相关的所有reference、pointers、iterator都会失效。
2.内存的重新配置会很耗时间。
Vector的容量之所以重要,有以下两个原因:
1. 容器的大小一旦超过capacity的大小,vector会重新配置内部的存储器,导致和vector元素相关的所有reference、pointers、iterator都会失效。
std::vector<int> v;//create an empty vector
v.reverse(80);// reserve memory for 80 elements
2.内存的重新配置会很耗时间。
std::vector<int> v(80);
关于reserve和resize的区别:
reserve只是预留出空间,并不真正的创建元素,所以并不会进行初始化。
resize后,修改容器空间,并初始化元素,这时候可以通过operator[]来进行操作。
vector 的 resize() 动作,会把原内存memset/bzero 0
string/vector等在执行clear后再执行shrink_to_fit也会清理内存
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
cout << "size:" << v.size() << endl;
cout << "capacity:" << v.capacity() << endl;
v.clear();
v.shrink_to_fit();
cout << "after swap size:" << v.size() << endl;
cout << "after swap capacity:" << v.capacity() << endl;
return 0;
}
//输出:
size:5
capacity:6
after swap size:0
after swap capacity:0
list容器中尽量不要使用删除操作,比插入操作多消耗近百倍

