c++边学边记 02 resize() 与 reserve()的区别

c++边学边记 02 resize() 与 reserve()的区别,第1张

c++边学边记 02 resize() 与 reserve()的区别

参考链接:C++中resize和reserve的区别

在使用STL时常常会把resize() 和 reserve()函数弄混,严重时会导致程序出现错误。
在解释这两个函数之前需要介绍容器的capacity和size之间的区别:

  1. capacity:指容器能够容纳的最大的元素的个数;
  2. size:指此时容器实际的元素个数。

就比如我有一个容量为300ml的水杯,里面现在装的水是200ml。意思是它最多能装300ml,只不过现在只是装了200ml。此时capacity为300, size为200。 所以reserve()是设置capacity的值,但是此时容器内还没有任何对象,不能通过下标访问。 而resize()是设置size的值,既分配了空间,也创建了对象(如果没有指定参数,系统调用默认构造函数),可以通过下标访问。
如下例子:

#include 
#include 
#include 

using namespace std;


void demo_reserve(){
    cout << " demo_reserve() " <<endl;

    vector<int> v;
    v.reserve(10);

    cout << "v.capacity: " << v.capacity() <<endl;
    cout << "v.size: " << v.size() << endl;

    v[2] = 10, v[3] = 100;

    for(auto p : v){
        cout << p << endl;
    }

}


void demo_resize(){

    cout << endl << " demo_resize() " <<endl;
    vector<int> v;
    v.resize(10);

    cout << "v.capacity: " << v.capacity() <<endl;
    cout << "v.size: " << v.size() << endl;

    v[2] = 100, v[9] = 99;

    for_each(v.begin(), v.end(), [](const int p ) -> void{
        cout <<p << endl;
    });
}


int main() {
    demo_reserve();
    demo_resize();

    return 0;
}

输出:

 demo_reserve()
v.capacity: 10
v.size: 0

 demo_resize()
v.capacity: 10
v.size: 10
0
0
100
0
0
0
0
0
0
99

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1352479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存