1.考虑下面的需求,对于vec开始的时候有1000个元素,后来只有10个元素,那么vec的capacity至少还是1000,后面的990个内存单元,没有使用,但是还被vec霸占着.如何释放这些内存呢? 2.我们知道,vector进行copy构造的时候,根据rhs 的size进行分配内存.因此,我们可以建立一个临时对象,然后交换一下就可以了.如下: vector<int>(vec).swap(vec); vector<int>(vec) 是个临时对象,可认为capacity为10,而…
假设我们预先为容器添加了一部分元素,接着用clear将它们删除,容器内部分配的存储空间实际上不会减小,改变的只是能够访问的元素个数.如下所示: std::vector<int> vec; for(int i=0;i<1000;i++) vec.push_back(i);vec.clear(); std::cout<<vec.capacity()<<std::endl; 此时控制台会输出1066,很明显之前的存储空间没有变化. 如果我们想要删除不必要的存储空间,可以…
最近在实现一个Delegate类的时候碰到了一个问题,就是copy and swap技巧和移动赋值操作符有冲突. 比如有以下一个类: class Fun { public: Fun(const Fun& rhs) throw(); Fun& operator=(Fun fun) { swap(fun); return *this; } void swap(Fun& other) throw(); }; 这个类实现了copy and swap技巧,在赋值的时候表现的很好.但是如果再加…
最近在看<Effective STL>,[条款17:使用“交换技巧”修整过剩容量]中提到容器的成函数void swap(container& from),即实现容器对象与from对象的交换. 另外,对于连续内存容器vector和string,还有shrink to fit(收缩到合适,根据容器的实际size设置capacity,减少实际内存分配)的功能. 以vector为例,首先说下,size和capacity.resize和reserve的含义及区别. 1. size和capacit…
1.由于vector的复制构造函数只为被复制的vector分配它所需要的空间,故可以用如下的方式来削减vector v中过剩的容量:vector<int>(v).swap(v) 2.the swap trick在交换两个容器内容的时候,将会交换两个容器的迭代器,指针和引用. std::vector<T>().swap(X) 作用相当于: { std::vector<T>  temp(X); temp.swap(X); } void swap(vector<_Tp,…
有时候开发网页中在改版之后,存在很多无意义的样式,对于后期的管理和维护很不友好. 如果手动去删除,很可能会导致出现更混乱的问题. 最近找到一个Chrome插件,CSS remove and combine,用于一键重新生成网页中引用的样式,非常方便. 下载地址:http://www.cnplugins.com/devtool/css-remove-and-combine/ 安装之后的效果: 其功能主要有两个部分 ① 下载精简格式化后的CSS: ② 未使用的选择器分析报告:…
今天学习是看到了讲解C++容器的一些细节用法,故记之!参考:http://www.cnblogs.com/answeryi/archive/2011/12/16/2289811.html: 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL =============================…
目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章 容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.…
看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. 确定容器中的对象拷贝正确而高效.也就是防止在存在继承关系时发生剥离. 4. 调用empty而不是检查size()是否为0来判断容器是否为空.原因是调用empty比检查size()更加高效. 5. 尽量使用区间成员,而不是多次使用与之对应的单元素成员函数,原因是这样更加高效.如尽量使用vector的…
点击查看Evernote原文. #@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com Chapter2 vector和string Topic 15: 注意string实现的多样性 string可能有多种不同的实现.文中介绍了四种,由于采用不同的实现,使用sizeof(string)计算会得到不同的值. 在这四种实现中,string对象的大小可以是一个char*指针大小的1到7倍.并且,各种实现的动态内存分配也不尽相同,可能需要1…