精华内容
下载资源
问答
  • 压缩容器多余容量

    2013-09-27 12:43:46
    解决方法:使用容器的拷贝构造函数和swap()函数(拷贝构造函数可以根据已有容器的大小决定一次性分配多少元素空间,不会产生冗余容量); std::vector vi; for(int c = 0;c  vi.push_back(c); } std::vector...

    解决方法:使用容器的拷贝构造函数和swap()函数(拷贝构造函数可以根据已有容器的大小决定一次性分配多少元素空间,不会产生冗余容量);

    std::vector<int> vi;

    for(int c = 0;c < 10;c++){

        vi.push_back(c);

    }

    std::vector<int>(vi).swap(vi);  //构造一个临时对象,然后与之交换元素



    展开全文
  • 在未指定vector大小的时候,第一次push_back操作会调用一次元素拷贝构造函数(此时vectordcapacity为1) 在第二次调用push_back时,容量不够,此时vector会重新分配capacity为原来2倍 vector会调用一次旧...

    定义一个vector<string>, 在其上多次调用push_back.观察string被拷贝了多少次

    在未指定vector大小的时候,第一次push_back操作会调用一次元素的拷贝构造函数(此时vectord的capacity为1)

    在第二次调用push_back时,容量不够,此时vector会重新分配capacity为原来的2倍

    vector会调用一次旧元素(第一个)的拷贝构造函数将它移到新内存上,同时旧内存会被释放掉。

    新元素也会有一次拷贝构造的过程。

    如果在push-back之前,提前分配了足够的内存,就可以避免这样的情况。

     

    转载于:https://www.cnblogs.com/sanerer/p/7875715.html

    展开全文
  • resize() --设置 size ,重新指定有效元素的个数 ,区别reserve()指定 容量的大小 capacity 一般大于size的原因是为了避免 每次增加数据时都要重新分配内存,所以一般会 生成一个较大的空间,以便随后的数据插入...

    size() – 返回目前存在的元素数。即: 元素个数
    capacity() – 返回容器能存储 数据的个数。 即:容器容量
    reserve() --设置 capacity 大小
    resize() --设置 size ,重新指定有效元素的个数 ,区别与reserve()指定 容量的大小
    在这里插入图片描述
    capacity 一般大于size的原因是为了避免 每次增加数据时都要重新分配内存,所以一般会 生成一个较大的空间,以便随后的数据插入。
    size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。
    capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间。
    这两个属性分别对应两个方法:resize()和reserve()。
    使用resize(),容器内的对象内存空间是真正存在的。
    使用reserve()仅仅只是修改了capacity的值,容器内的对象并没有真实的内存空间(空间是"野"的)。
    此时切记使用[]操作符访问容器内的对象,很可能出现数组越界的问题。
    针对capacity这个属性,STL中的其他容器,如list map set deque,由于这些容器的内存是散列分布的,因此不会发生类似realloc()的调用情况,因此我们可以认为capacity属性针对这些容器是没有意义的,因此设计时这些容器没有该属性。
    在STL中,拥有capacity属性的容器只有vector和string。

    #include <iostream>
    #include<vector>
    using namespace std;
    using std::cout;
    using std::cin;
    using std::endl;
    
    int main()
    {
    	vector<int> ivec;
    	cout << "capacity: " << ivec.capacity() << "  size: "  << ivec.size() << endl;
    	//添加10个元素
    	for (int i = 0; i < 10; ++i)
    	{
    		ivec.push_back(i);
    		cout << "capacity: " << ivec.capacity() << "  size: " << ivec.size() << endl;
    	}
    	//将容量用完
    	while (ivec.size() != ivec.capacity())
    		ivec.push_back(0);
    	//添加1个元素
    	cout << "size = capacity. insert one element\n";
    	ivec.push_back(0);
    	cout << "capacity:" << ivec.capacity() << "  size:" << ivec.size() << endl;
    
    	ivec.reserve(100);
    	cout << "reserve capacity 100\n";
    	cout << "capacity:" << ivec.capacity() << "  size:" << ivec.size() << endl;
    
    	//将容量用完
    	while (ivec.size() != ivec.capacity())
    		ivec.push_back(42);
    	//添加1个元素
    	cout << "size = capacity. insert one element\n";
    	ivec.push_back(0);
    	cout << "capacity:" << ivec.capacity() << "  size:" << ivec.size() << endl;
    
    	ivec.resize(50);
    	cout << "resize size 50\n";
    	cout << "capacity:" << ivec.capacity() << "  size:" << ivec.size() << endl;
    	getchar();
    	return 0;
    }
    /*
    capacity: 1  size: 1
    capacity: 2  size: 2
    capacity: 3  size: 3
    capacity: 4  size: 4
    capacity: 6  size: 5
    capacity: 6  size: 6
    capacity: 9  size: 7
    capacity: 9  size: 8
    capacity: 9  size: 9
    capacity: 13  size: 10
    size = capacity. insert one element
    capacity:19  size:14
    reserve capacity 100
    capacity:100  size:14
    size = capacity. insert one element
    capacity:150  size:101
    */
    
    展开全文
  • 大小(size,跟resize相对应)与容量(capacity,reserve相对应)之间有很大区别: size表明容器中目前实际有多少个元素,resize会在容器的尾部添加或删除一些元素,使容器达到指定的大小。这两个函数对list、...

    大小(size,跟resize相对应)与容量(capacity,与reserve相对应)之间有很大的区别:

    size表明容器中目前实际有多少个元素,resize会在容器的尾部添加或删除一些元素,使容器达到指定的大小。这两个函数对list、vector、deque都适用,对其它容器不适用。

    capacity表明最少添加多少个元素才会导致容器重新分配内存,reserve会使容器的内部缓冲区扩充至一个更大的容量,以确保至少满足reserve的参数所指出的空间大小。这两个函数仅对vector适用。

    v.reserve(2);执行之后,可以确保v.capacity() >= 2;(注意不是v.capacity() == 2;)。

    转载于:https://www.cnblogs.com/zhuyf87/archive/2012/12/07/2806998.html

    展开全文
  • 数组集合区别

    2019-07-22 22:03:28
    (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。 联系:使用相应toArray()和Arrays.asList()方法可以回想转换。 2为什么数组不能向集合一样添加元素? ...
  • List接口用于包含一组 有序有重复 对象 List中元素都对应一个整型序号,记载其在容器位置,可以根据...多少自行拓展集合的容量大小。 List两种集合实现类有:ArrayList和LinkedList,下面分开讲解一下。
  • 集合类泛型

    2017-12-02 19:11:40
    (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。联系:使用相应toArray()和Arrays.asList()方法可以回想转换。ArrayList常用api有: 1.
  • Size指目前容器中实际有多少元素,对应resize(size_type)会在容器尾添加或删除一些元素,来调整容器中实际内容,使容器达到指定的大小。 Capacity指最少要多少元素才会使其容量重新分配,对应reserve...
  • 为什么需要集合?集合常用方法

    万次阅读 2018-07-25 17:38:02
    另一方面,使用Array(数组)存储对象方面具有一些弊端,需要提前对数组进行容量大小的设定,而Java 集合就像一种容器,可以动态地把多个对象引用放入容器中,不要提前设置容量大小。存多少就是多少。   JAVA...
  • vector中size和capacity

    2014-04-09 21:12:38
    l Size指目前容器中实际有多少元素,对应resize(size_type)会在容器尾添加或删除一些元素,来调整容器中实际内容,使容器达到指定的大小。 l Capacity指最少要多少元素才会使其容量重新分配,对应reserve
  • Size指目前容器中实际有多少元素,对应resize(size_type)会在容器尾添加或删除一些元素,来调整容器中实际内容,使容器达到指定的大小。 Capacity指最少要多少元素才会使其容量重新分配,对应reserve(size_type
  • C++秋招记录(八)面试题目二、vector扩容为题...resize:改变容器大小,改变当前容器元素数量,少了添加,多了删除 reserve():改变当前容器最大容量(capacity),它不会生成元素,只是确定这个容器允许放入多少
  • 以调整容器的性能。 </li><li> <p>LinkedHashMap 类似于HashMap,但是迭代遍历它时,取得“键值对”顺序是其插入次序,或者是最近最少使用(LRU)次序。只比 HashMap 慢一点ÿ...
  • vector--C++ STL 学习

    2019-09-11 20:58:41
    vector对应数据结构为数组,而且是动态数组,也就是说我们不必关心该数组事先定义的容量多少,它的大小会动态增长。数组类似是,我们可以在末尾进行元素添加和删除,也可以进行元素值随机访问和修改。 ...
  • 内存管理效率 size() 获得容器中有多少元素 capacity() 获得容器在它已经分配内存中可以容纳多少元素 resize(Container::size_type n) ...强制容器把它的容量改为不小于n,提供n不小于当前所需
  • 4.10 心爱小宝贝相片集——Gallery衍生BaseAdapter容器 4.11 快速搜索手机文件引擎——JavaI/O应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能菜单——AutoCompleteTextView...
  • 面试题整理

    2019-07-16 15:52:51
    (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。 联系:使用相应toArray()和Arrays.asList()方法可以回想转换。 2.说一说Map: Map是...
  • 事件处理器访问共享状态其他代码都要采取线程安全方式实现 框架通过在框架线程中调用应用程序代码将并发性引入应用程序,因此对线程安全需求在整个应用程序中都需要考虑 基础知识 线程安全性 ...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

容量的多少与容器大小