0

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

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

我阅读了C++ 参考,它是这样说的:

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

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

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

myVector如果 10 大于其当前大小,则将infinity 的内容复制到?

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

谢谢!

4

3 回答 3

4

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

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

于 2013-07-31T13:47:11.440 回答
1

是的。该resize()函数可用于增加或减少向量的大小。但是,如果您使用它来增加大小(如果新大小大于当前大小),则必须在这些新单元格中添加一些内容如果你不指定第二个参数,那么这个值是向量所持有的任何数据类型的默认构造函数;但是,您可以使用第二个参数来指定该默认值应该是什么。它的常见用途是指定 , 等的0NULL

于 2013-07-31T13:48:37.067 回答
0

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

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

于 2013-07-31T13:48:15.583 回答