精华内容
下载资源
问答
  • vectorresize和reserve

    2018-11-06 13:07:06
    官方文档 resize:...reserve:http://www.cplusplus.com/reference/vector/vector/reserve/ resize Resizes the container so that it contains n elements. 1、I...

    官方文档

    resize:http://www.cplusplus.com/reference/vector/vector/resize/
    reserve:http://www.cplusplus.com/reference/vector/vector/reserve/

    resize

    Resizes the container so that it contains n elements.
    1、If n is smaller than the current container size, the content is reduced to its first n elements, removing those beyond (and destroying them).
    如果n比当前容器size小,当前容器内容会被缩减到前n个,多余的被清除。
    2、If n is greater than the current container size, the content is
    expanded by inserting at the end as many elements as needed to reach a
    size of n. If val is specified, the new elements are initialized as
    copies of val, otherwise, they are value-initialized.
    如果n比当前容器的size大,容器size或被扩充到n,如果这扩充的n个数指定了数值,则填入指定数值,否则,为默认值。
    3、If n is also greater than the current container capacity, an automatic
    reallocation of the allocated storage space takes place.
    如果n比当前容器的容积都大,内容空间会被重新分配。
    Notice that this function changes the actual content of the container
    by inserting or erasing elements from it.
    注意这个函数会影响容器的size。

    reserve

    Request a change in capacity Requests that the vector capacity be at
    least enough to contain n elements.

    1、If n is greater than the current vector capacity, the function causes
    the container to reallocate its storage increasing its capacity to n
    (or greater).
    如果n大于当前容器容积,容器会重新分配内存。
    2、In all other cases, the function call does not cause a reallocation
    and the vector capacity is not affected.
    其他情况,不产生影响
    Note:This function has no effect on the vector size and cannot alter its
    elements.
    这个函数对size 没有影响,也不会改变元素值。

    size和capacity辨析

    类比:

        int a[10],index=5;
        for(int i=0;i<index;i++) cin>>a[i]
    

    10是我们开辟的空间大小,5是我们实际使用的空间,此空间的单位是元素个数,而非字节。
    那么对应的capacity对应开辟空间,size对应使用空间。

    测试代码

        #include <iostream>
        #include <vector>
        using namespace std;
        
        int main(){
        	vector<int> a;
        	a.reserve(100);
        	cout<<a.size()<<"  "<<a.capacity()<<endl;
        	a.resize(150);
        	cout<<a.size()<<"  "<<a.capacity()<<endl;
        	a.reserve(50);
        	cout<<a.size()<<"  "<<a.capacity()<<endl;
        	a.resize(50);
        	cout<<a.size()<<"  "<<a.capacity()<<endl;
        } 
    

    结果
    在这里插入图片描述

    展开全文
  • 关于vector的capacity和size 在vector中,size表示当前vector数组的长度,即现在含有元素数量,而...resize和reserve resize(n)代表将vector的size限定为n,即如果原来vector的大小大于n,那么将剩下的...
    • 关于vector的capacity和size

              在vector中,size表示当前vector数组的长度,即现在含有元素数量,而capacity则指的是在当前vector还没有重新分配空间前你最大容量。

    •  resize和reserve

              resize(n)代表将vector的size限定为n,即如果原来vector的大小大于n,那么将剩下的多余都去掉,如果小于则将剩下初始化。

              reserve(n)则是给vector预分配一个capacity,但如果原来的capacity已经大于n,那么这个语句没有作用,如果小于,则设置capacity为n

    •  Example

            

           

     

    转载于:https://www.cnblogs.com/xlqtlhx/p/8596894.html

    展开全文
  • reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。 resize是改变容器的大小,并且创建对象,因此,调用这个函数...

     

    基本用法

    reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。

    resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了.

    再者,两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数.

     

    Test Code:

    定义class:

    #pragma once
    #include <iostream>
    #include <vector>
    class checkSTDVector
    {
    public:
    	checkSTDVector() {
    		std::cout << "checkSTDVector::checkSTDVector() \n";
    	}
    	checkSTDVector(int a):mA(a) {
    		std::cout << "checkSTDVector::checkSTDVector() No default \n";
    	}
    	~checkSTDVector(){
    		std::cout << "checkSTDVector::~~checkSTDVector() \n";
    	}
    
    	checkSTDVector(const checkSTDVector& val) {
    		std::cout << "checkSTDVector::Copy constructor! \n";
    		if (this !=  &val)
    		{
    			this->mA = val.mA;
    		}	
    	}
    
    
    
    	void Test() {
    		std::cout << "mA="<<mA << std::endl;
    	}
    private:
    	int mA = 0;
    };

    test1:

    
    int main_checkSTDVector() {
    
    	std::vector<checkSTDVector> vec;
    
    	vec.reserve(6);//不会触发任何构造函数
    	std::cout << "size=" << vec.size() << " capacity=" << vec.capacity() << std::endl;
    
    	std::cout << "================== \n \n";
    
    	vec.resize(3);//调用3次默认构造函数
    	std::cout << "size=" << vec.size() << " capacity=" << vec.capacity() << std::endl;
    	std::cout << "addr of vector=" << &vec << std::endl;
    	std::cout << "addr of vector[0]=" << &vec[0] << std::endl;
    	std::cout << "================== \n \n";
    
    	/*
    	调用7次默认构造函数,3次复制构造函数, 3次析构函数。
    	推测:capacity需要从6变到10, 需要重新为整个vector开辟一个包括10个obj的空间(经验证,addr of vector[0]总是变化,
    	addr of vector不变,因为vector对象内部存储了多个元素,可能是vector类有一个指针指向这片空间,而这片空间随着vector的
    	大小的变化要不断重新分配)
    	同时,保证新空间中的前三个obj与原先的相同,从而调用3次复制构造函数; 剩余的7个obj对应7次默认构造函数;
    
    	嗯, 经过验证,如果将下面vec.resize(10) 改为vec.resize(10,checkSTDVector(1)) 则会调用10次复制构造函数,即10个新
    	元素都用checkSTDVector(1)进行初始化,旧的三个全部析构掉。
    	*/
    	vec.resize(10);
    	///vec.resize(10,checkSTDVector(1));
    	vec[9].Test();//output 0
    	std::cout << "size=" << vec.size() << " capacity=" << vec.capacity() << std::endl;
    	std::cout << "addr of vector =" << &vec << std::endl;
    	std::cout << "addr of vector[0]=" << &vec[0] << std::endl;
    
    	std::cout << "ending ============ \n \n";
    	//最后,进程退出时,调用10次析构函数。
    	return 0;
    }
    

     

    test2:

    int main() {
    
    	std::vector<checkSTDVector> vec;
    
    	/*
    	原型:void resize (size_type n, const value_type& val);
    	调用一次构造函数,构造出一个临时对象,然后以引用的方式传给resize函数的第二个入参,
    	然后,调用10次复制构造函数,构造出10个元素;
    	最后,临时对象被析构。
    	*/
    	vec.resize(10, checkSTDVector(1));
    	vec[9].Test();
    	std::cout << "size=" << vec.size() << " capacity=" << vec.capacity() << std::endl;
    
    	std::cout << "================== \n \n";
    	vec.resize(2);//调用8次析构函数! 既resize保证了vector内部的实例的个数为其入参。
    	std::cout << "size=" << vec.size() << " capacity=" << vec.capacity() << std::endl; //capacity仍然为10
    
    	std::cout << "================== \n \n";
    	vec.resize(4); //resize为4, 当前已经有2个,即再增加2个,调用2次默认构造函数
    	vec[2].Test();//output 0
    	vec[0].Test();//output 1
    
    	std::cout << "ending ============ \n \n";
    	//最后,进程退出时,剩余的4个元素被析构,调用四次析构函数。
    
    	return 0;
    }

     

    std::vector的源码实现

    <stl源码剖析>

    https://www.cnblogs.com/yocichen/p/10574819.html

     

     

     

    展开全文
  • vector动态分配内存,有时候效率低,因为提前分配好可以提高效率。 1.reserve是容器预留空间,但并不是真正...vector::reserve vector::resize 参考: https://www.pianshen.com/article/5109465785/ ...

    vector动态分配内存,有时候效率低,因为提前分配好可以提高效率。

    1. reserve是容器预留空间,但并不是真正创建元素。

    2.resize是改变容器的大小,并创建对象。

    vector::reserve

     

    vector::resize

     

    参考:

    https://www.pianshen.com/article/5109465785/

     

    展开全文
  • vectorresize 和reserve

    2016-05-10 21:11:32
    resize 修改了sizecapacity reserve 只修改了capacity 因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。 resize例子: ...
  • vectorresize和reserve的区别#include using namespace std; #include<vector> int main() { vector<int> a; a.reserve(10); //分配10int大小的容量,没有初始化,不能访问 * * * * * * * * * * //初始化5个...
  • 主要弄明白capacitysize区别就可以了 先看看《C++ Primer》中对resize()函数两种用法的介绍: 1、resize(n)  调整容器的长度大小,使其能容纳n个元素。 如果n小于容器的当前的size,则删除多出来的元素。 ...
  • C++ vector resize和reserve

    2017-10-30 19:39:11
    指当前容器所存储的元素个数resize:(resize既分配了空间,也创建了对象) 1、resize(n) 调整容器的长度大小,使其能容纳n个元素。 如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的...
  • resize改变了vector的capacity同时也增加了它的size! 原因如下:  reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_...
  •  ...而resize改变了vector的capacity同时也增加了它的size!原因如下:      reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前...
  • vectorresize()和reserve()函数的区别 reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。 resize是改变...
  • resize() 【rɪ'zɜːv】类似 realloc(); reserve类似 malloc(); 另外 reverse【rɪ'vɜːs】 是stl 算法,反转容器中的元素
  • resize 调整的是vector的大小,改变的是vector的size;如果resize的调整值小于vector的size,则会删除多余的元素;如果大于size,则增加元素。 reserve 调整的是vector的预分配的内存,改变的是vector的capacity。...
  • 文章目录问题描述release和debug的区别size和capacityresize和reserveresize_Reservereserve...3. resize和reserve区别的意义又是什么?4. reserve会改变空间大小,那么地址会变,得去验证一下 问题描述 今天遇到...
  • vectorresize reserve

    2015-03-26 17:28:00
    首先声明,都是转载的,理解知识为主要目的。 ... C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。...标准库vector类型使用需要的头文件:#include ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397
精华内容 158
关键字:

resize和reservevector