std::reserve和std::resize的区别

std::reserve是设置容器容量的,调用该函数后,容器的capacity可能会变大或不变,但不会变小

如:

    vector    value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
    int k = value.capacity();
    value.reserve(2);
    int k1 = value.capacity();

在我本机上例k、k1都为15,即和value.size()大小相等,k1并不是2,如果将

 value.reserve(2)改为 value.reserve(20),则k为15,k1为20

可以看到当reserve设置的参数比容器实际存放的元素个数小,则容器的capacity()不会变化,不会变小;当reserve设置的参数比容器实际存放的元素个数大,则容器的capacity()会增大至reserve设置的参数大小。

resize是改变容器内实际存放的元素个数的,注意和容器容量的区别,一般地容器容量>=容器实际存放元素个数。

继续以上例讲解:

    vector  value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
    int k = value.capacity();
    value.reserve(2);
    int k1 = value.capacity();
    value.resize(100);
    k1 = value.capacity();

通过resize(100)将容器实际存放的元素扩大到100个后,因为原来的capacity()只有15个,存放不了100个元素,故容器内部也会自动将容量扩容,这里在我本机k1变为了100。

    int k = value.capacity();
    value.reserve(2);
    int k1 = value.capacity();
    value.resize(100);
    k1 = value.capacity();
    value.resize(10);
    k1 = value.capacity();

上例通过.resize(10)将实际存放的元素变为了10个(当需要减小容器的大小时,会移除多余的元素。),其后的容量

k1依然是100,即不会缩小。

综上:

std::reserve是设置容器容量的,调用该函数后,容器的capacity可能会变大或不变,但绝对不会比没用调用该函数之前的还小。

resize是改变容器内实际存放的元素个数的,只有改变的大小超过了capacity时,capacity才会变大。

resize变小时,capacity不会影响。

一般地容器容量>=容器实际存放元素个数。

std::vector的reserve和resize的区别》这篇文章也值得一看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值