vector shrink_to_fit

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int>vec;
    for(int i = 0 ;i  < 100 ; ++i)
        vec.push_back(i);
    cout << vec.size() << endl; //100
    cout << vec.capacity() << endl; //128
    vec.erase(vec.begin()+10,vec.end()); //改变了size,但是并未改变capccity
    cout << vec.size() << endl; //10
    cout << vec.capacity() << endl; //128
    vector<int>(vec).swap(vec);
    cout << vec.size() << endl; //10
    cout << vec.capacity() << endl; //10
    vec.clear(); //clear并未真正释放空间!!!
    cout << vec.size() << endl; //0
    cout << vec.capacity() << endl; //10
    vector<int> (vec).swap(vec); //这才真正释放了空间!!
    cout << vec.size() << endl; //0
    cout << vec.capacity() << endl; //0
    return 0;
}

PS:C++11中已经实现了shink_to_fit函数。实现上述功能。

vector shrink_to_fit

时间: 2024-12-20 01:10:32

vector shrink_to_fit的相关文章

实战c++中的vector系列--C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())

前面提到的emplace_back就是C++11所增加的内容. 所以这篇博客就是想罗列一下C++11对vector容器的扩充. std::vector::cbegin和std::vector::cend 这两个方法是与std::vector::begin和std::vector::end相对应的,从字面就能看出来,多了一个'c',顾名思义就是const的意思. 所以: std::vector::cbegin: Returns a const_iterator pointing to the fi

STL vector总结(三)Capacity(36)

这里是vector的所有构造方法,成员方法的一些总结,具体的可以详看后面的链接. public member function <vector> std::vector::size C++98 C++11 size_type size() const noexcept; 返回vector中元素的个数. 这个个数是vector中实际存放的元素个数,但不一定必须等于这个vector的容量. Parameters none Return Value. 返回值为元素个数. 原文地址:http://bl

【Redis源码剖析】 - Redis内置数据结构之字典dict

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337 今天我们来讲讲Redis中的哈希表.哈希表在C++中对应的是map数据结构,但在Redis中称作dict(字典).Redis只是用了几个简单的结构体和几种常见的哈希算法就实现了一个简单的类似高级语言中的map结构.下面我们来具体分析一下dict的实现. 在学习数据结构的时候,我们接触过一种称作"散列表"的结构,可以根据关键字而直接访问记录.说的具体一点就

STL 序列容器

转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序列型容器和相关的容器适配器.主要内容包括 std::vector std::array std::deque std::queue std::stack std::priority_queue std::list std::forward_list std::vector 1)初始化 int ini

C++温习-标准库-vector

vector是C++中最基本的顺序容器,可把它看作是一个自动可变长度的数组来使用,使用中,比直接定义数组来使用方便,但运行效率会比数组低一些. vector的内部实现,还是数组的形式,当新插入数据使得大于容量时,就会进行重新分配空间,并移动数据,vector并不是每次插入新的数据都重新分配空间,并且移动数据,毕竟这样的效率太低了,通常,它是会新开一个大一些的空间,来避免过于频繁的分配空间和移动数据. vector 当然也是类模板. template < class T, class Alloc

【足迹C++primer】27、vector对象是如何增长的

vector对象是如何增长的 当需要更多空间的时候,会重新分配比新空间需求更大的内存空间,作为备用 管理容器的成员函数 shrink_to_fit //只适用于vector,string,deque capacity reserve //只适用于vector,string c.shrink_to_fit() //请将capacity()减少为与size相同大小 c.capacity() //不重新分配内存空间的话,c可以保存多少元素 c.reserve(n) //分配至少能容纳n个元素的内存空间

C/C++中容器vector使用方法&lt;第二弹&gt;

此文总结常用vector操作,是前一篇的续作!只有代码,详细请看代码中的注释.出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的. /********************************************************************* * file_name: vector_test.cpp * * Created on: 2014年6月28日 下午3:34:23 * Author: The_T

STL之vector使用详解

Vector成员函数 函数 表述 c.assign(beg,end)c.assign(n,elem) 将[beg; end)区间中的数据赋值给c.将n个elem的拷贝赋值给c. c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range. c.back() 传回最后一个数据,不检查这个数据是否存在. c.begin() 传回迭代器重的可一个数据. c.capacity() 返回容器中数据个数. c.clear() 移除容器中所有数据. c.empty() 判断容器

[c++面试准备]--vector对象是如何增长的

参考资料:cpp primer 5th 背景: 为了支持快速的访问,vector/string将元素连续存储--每个元素都是紧挨着前一个元素存储. 如果我们向vector/string中添加新的元素,会发生什么:由于连续存放的缘故,当没有多余的空间来容纳新的元素的时候,容器必须分配新的空间来保存已有的元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新的元素,释放旧的空间. vector不会对新添加的每一个元素都做上述操作,效率太慢.所以vector会预留一些空间.就是因为这些预留的空间,