我在理解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
?
如果有人可以解释,那就太好了。
谢谢!
答案 0 :(得分:4)
它将向量中的所有值设置为该值,因此如果myVector
开头为空,则它将包含10个双精度值,其中无穷大值。如果向量中已经有值1.3,2.9,3.6,-1.9和5.2,则接下来的五个元素将是无穷大。
显然,如果你有一个值或者值是什么,如果向量已经大于10个元素,则没有区别。
答案 1 :(得分:1)
是。 resize()
函数可用于增加或减少向量的大小。但是,如果您使用它来增加大小(如果新大小大于当前大小),某些必须进入这些新单元格。如果未指定第二个参数,则此值是向量所包含的任何数据类型的默认构造函数;但是,您可以使用第二个参数指定默认值应该是什么。此常见用途是指定0
,NULL
等值
答案 2 :(得分:0)
尽管有一些精心设计的语言,但它非常简单。如果resize创建了新元素,那么它们当然必须用某些东西进行初始化。通常,对于vector<T>
,它们将通过调用T
的默认构造函数进行初始化。假设第二个参数将新元素初始化为该值的副本。
在您的示例中,实际上,调用确保向量具有10个项目,如果它少于该项目,则所有新项目都会收到infinity
的副本。因此,如果您的向量有6个元素,它将获得4个infinity
的新副本。