std :: vector.resize()中的第二个参数是什么意思?

时间:2013-07-31 13:44:45

标签: c++ std stdvector

我在理解const value_type& val在此函数中的含义时遇到了一些问题:

void std::vector::resize (size_type n, const value_type& val);

我读了C++ reference,这就是它的内容:

  

如果n大于当前容器大小,则将其内容复制到添加的元素的对象。   如果未指定,则使用默认构造函数。   成员类型value_type是容器中元素的类型,在向量中定义为第一个模板参数(T)的别名。

但究竟是做什么的?例如,我有这行代码:

myVector.resize(10, numeric_limits<double>::infinity());

如果10大于当前大小,则无穷大的内容会被复制到myVector

如果有人可以解释,那就太好了。

谢谢!

3 个答案:

答案 0 :(得分:4)

它将向量中的所有值设置为该值,因此如果myVector开头为空,则它将包含10个双精度值,其中无穷大值。如果向量中已经有值1.3,2.9,3.6,-1.9和5.2,则接下来的五个元素将是无穷大。

显然,如果你有一个值或者值是什么,如果向量已经大于10个元素,则没有区别。

答案 1 :(得分:1)

是。 resize()函数可用于增加或减少向量的大小。但是,如果您使用它来增加大小(如果新大小大于当前大小),某些必须进入这些新单元格。如果未指定第二个参数,则此值是向量所包含的任何数据类型的默认构造函数;但是,您可以使用第二个参数指定默认值应该是什么。此常见用途是指定0NULL等值

答案 2 :(得分:0)

尽管有一些精心设计的语言,但它非常简单。如果resize创建了新元素,那么它们当然必须用某些东西进行初始化。通常,对于vector<T>,它们将通过调用T的默认构造函数进行初始化。假设第二个参数将新元素初始化为该值的副本。

在您的示例中,实际上,调用确保向量具有10个项目,如果它少于该项目,则所有新项目都会收到infinity的副本。因此,如果您的向量有6个元素,它将获得4个infinity的新副本。