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))范围内的值均保持不变。
本文详细解析了resize与assign函数的功能及使用方法。resize函数通过调整容器大小并填充新元素值来实现长度变化;assign函数则用于设置容器中所有元素的值,并调整其大小。文章深入探讨了两种函数的不同版本及其在不同情况下的应用。
601

被折叠的 条评论
为什么被折叠?



