vector的clear()和swap()比较
来源:互联网 发布:淘宝开店怎么交保证金 编辑:程序博客网 时间:2024/05/29 13:38
假设有若干对象存于一个 vector 中:
class Widget;vector<Widget> vw;
后来由于某些原因,从该容器中删除了若干对象(参考erase-remove idiom )。对于 vector 和 string 来讲, erase() 和 clear() 并不会改变容器的capacity,也就不会改变他们的内存占用。
swap() 本意是用来交换两个容器的内容( Iterators, pointers, and references),但我们可以用他来快速将容器的 capacity 调整为 合适 的大小:
vector<Widget>(vw).swap(vw);
巧妙之处在于, vector 的拷贝构造函数仅仅拷贝有用的部分而忽略那些未占用的空间,用这个拷贝构造出来的容器来和 vw 进行 swap() 就可以调整 vw 的 capacity 为一个 相对较小的值 。
这里之所以说是 相对较小的值 而不是与 size() 绝对相等,是因为容器的 Implementation 在构造的时候会自己选取合适的值来保证分配的空间足够容纳所有的元素,但这个值可能会比 size() 大, 可参考Item 14 。
下面是一个简单的例子,对 vector 进行一些操作,然后输出其 erase, swap,clear 之后的 size 与 capacity:
#include <vector>#include <iostream>#include <time.h>#include <stdlib.h>#include <fstream>#include <iterator>using namespace std;const int MAX = 1024;#define show(v, msg) printf ("%s -- %s: size: %lu, capacity: %lu\n", \ #v, msg, v.size(), v.capacity());int main(int argc, char *argv[]){ srand(time(NULL)); printf("Testing vector...\n"); vector<int> v; show(v, "After init"); v.reserve(MAX); show(v, "After reserve()"); for (int i = 0; i < MAX; ++i) { v.push_back(random()%1000); } show(v, "After Filling"); v.erase(remove_if(v.begin(), v.end(), [](int x){return x > 100;}), v.end()); show(v, "After erase()"); vector<int>(v).swap(v); show(v, "After swap()"); v.clear(); show(v, "after clear"); vector<int>().swap(v); show(v, "after swap with empty vector"); return 0;}
其输出如下:
Testing vector...v -- After init: size: 0, capacity: 0v -- After reserve(): size: 0, capacity: 1024v -- After Filling: size: 1024, capacity: 1024v -- After erase(): size: 106, capacity: 1024v -- After swap(): size: 106, capacity: 106v -- after clear: size: 0, capacity: 106v -- after swap with empty vector: size: 0, capacity: 0Program ended with exit code: 0
0 0
- vector的clear()和swap()比较
- vector clear 和 swap的比较
- vector clear 和 swap的比较
- vector内存清理情况 clear和swap
- vector利用swap()函数进行内存的释放 和capacity()、size()、clear()、reserve()函数
- 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
- 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
- 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
- Vector清空数据与释放内存(.clear与.swap的区别与使用)
- vector和数组 swap
- vector::clear()和vecotr::pop_back()对内存处理的不同
- vector::clear()和vecotr::pop_back()对内存处理的不同
- 【转】[STL]vector和deque的内存释放(clear)
- 【转】[STL]vector和deque的内存释放(clear)
- vector::clear(),容器vector的clear函数详解。
- ArrayList和Vector的比较
- ArrayList和Vector的比较
- Vector和ArrayList的比较
- 挑7
- windows下启动mysql服务
- 使用 CSS 预处理器的优缺点有哪些?(SASS,Compass,Stylus,LESS) 描述下你曾经使用过的 CSS 预处理的优缺点。
- poj 2777 Count Color
- C++ Primer复习和学习笔记 第七章 函数
- vector的clear()和swap()比较
- C++ Primer复习和学习笔记 第八章 标准IO库
- RuntimeException异常
- 如何挖掘关键词
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop
- Hadoop第一天---初识Hadoop