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))范围内的值均保持不变。