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 0string/vector等在执行clear后再执行shrink_to_fit也会清理内存
不用以为只有swap替代clear才能正确释放vector的内存,C++11推出了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容器中尽量不要使用删除操作,比插入操作多消耗近百倍
![【编程】STL各种容器的使用总结 【编程】STL各种容器的使用总结](https://i-blog.csdnimg.cn/blog_migrate/b4dc469ee3d1fa402ab3736bccfc1929.gif)
![【编程】STL各种容器的使用总结 【编程】STL各种容器的使用总结](https://i-blog.csdnimg.cn/blog_migrate/b4dc469ee3d1fa402ab3736bccfc1929.gif)