关于vector中的assign和resize函数

assign函数需要2个参数,第一个参数指定新的size,第2个指定每个元素都取的value。size()函数返回assign中的第一个参数值。调用该函数一定要指定第2个参数值,调用完后,是全新的size,全新的值。

 

resize函数有2个重载版本,一个只有一个size_type参数,一个除了size_type参数外还有_Ty _val,即“可选”新元素值。

 

先说第一个版本:

 void resize(size_type _Newsize)
  { // determine new length, padding with _Ty() elements as needed
  resize(_Newsize, _Ty());
  }

 

可见它用_Ty()做第2个参数,调用了它的第2个版本。第2个版本的定义如下:

 void resize(size_type _Newsize, _Ty _Val)
  { // determine new length, padding with _Val elements as needed
  if (size() < _Newsize)
   _Insert_n(end(), _Newsize - size(), _Val);
  else if (_Newsize < size())
   erase(begin() + _Newsize, end());
  }

由定义可知,对于第一个版本:

若_Newsize小于oldsize,则剩余元素值不变。

若_Newsize大于oldsize,则新添加的元素值用元素的默认构造参数初始化(特别的,int型的将被初始化为0)。

对于第2个版本:

若_Newsize小于oldsize,则剩余元素值不变。(全部调用erase(begin() + _Newsize, end())擦除掉多余元素)

若_Newsize大于oldsize,则新添加的元素值用提供的第2个参数初始化。

 

不管用哪个版本,[0,min(_Newsize,oldsize))范围内的值均保持不变。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值