做网站除了买域名还有什么,刘涛做代言的那个网站,wordpress 慢的上天,制作网页的工具有哪些首先#xff0c;vector与deque不同#xff0c;其内存占用空间只会增长#xff0c;不会减小。比如你首先分配了10,000个字节#xff0c;然后erase掉后面9,999个#xff0c;则虽然有效元素只有一个#xff0c;但是内存占用仍为10,000个。所有空间在vector析构时回收。
1、…首先vector与deque不同其内存占用空间只会增长不会减小。比如你首先分配了10,000个字节然后erase掉后面9,999个则虽然有效元素只有一个但是内存占用仍为10,000个。所有空间在vector析构时回收。
1、释放内存: empty()是用来检测容器是否为空的clear()可以清空所有元素。但是即使clear()所占用的内存空间依然如故。如果你需要空间动态缩小可以考虑使用deque。如果非要用vector这里有一个办法 在《effective STL》和其实很多C文章中都有指明用clear()无法保证内存回收。但是swap技法可以。具体方法如下所示 vectorint ivec; ivec.push_back(1);ivec.push_back(1);ivec.push_back(2);ivec.push_back(2); vectorint().swap(ivec); //或者ivec.swap(vectorint()) vectorint().swap(ivec); 或者如下所示 加一对大括号都可以意思一样的 { std::vectorint tmp; ivec.swap(tmp); } 加一对大括号是可以让tmp退出{}的时候自动析构
2、修整空间 在一个应用中可能会需要向一个vector中插入很多记录比如说100000条为了避免在插入过程中移动内存咱实现向系统预订一段足够的连续的空间例如 vectorint ivec; ivec.reserve(100000); 这个问题是解决了。 但是如果后来这个vector不再需要存那么多的元素了已经通过erase删除了。但是以前咱们预留的空间却无法被其他程序再度利用这样会造成内存一定程度上的浪费。于是我们利用目前的vector构造一个一模一样的vector他并没有预留空间于是以前预留的空间也被释放以作他用了 ivec.swap(vectorint(ivec)); // or vectorint(ivec).swap(ivec) 或者如下所示 加一对大括号都可以意思一样的 { std::vectorint tmp ivec; ivec.swap(tmp); } 加一对大括号是可以让tmp退出{}的时候自动析构 使用这种方法的前提是vector从前存储了大量数据比如10000000经过各种处理后现在只有100条那么向清空原来数据所占有的空间就可以通过这种交换技术swap技法就是通过交换函数swap使得vector离开其自身的作用域从而强制释放vector所占的内存空间。 #include stdafx.h #include vector #include iostream using namespace std; int main(int argc, char* argv[]) { vector int v1, v2; cout The number of elements in v1 v1.size( ) endl; cout The number of elements in v2 v2.size( ) endl; cout v1.capacity() endl; cout v2.capacity() endl; v1.push_back( 1 ); v1.push_back( 2 ); v1.push_back( 3 ); v2.push_back( 10 ); v2.push_back( 20 ); cout The number of elements in v1 v1.size( ) endl; cout The number of elements in v2 v2.size( ) endl; cout v1.capacity() endl; cout v2.capacity() endl; cout endl; v1.swap( v2 ); cout The number of elements in v1 v1.size( ) endl; cout The number of elements in v2 v2.size( ) endl; cout v1.capacity() endl; cout v2.capacity() endl; return 0; }