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

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 <iostream>
#include <vector>
#include <algorithm>

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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无边_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值