这个函数对vector的使用是否无用?

时间:2013-04-05 00:33:47

标签: c++

我之前看过这个,对我来说没有任何意义:

void generate(std::vector<float> v)
{
 float f = generate_next_float();
 v.push_back(f);
}

如果将v作为参考或指针发送,那将是有意义的。但是它是按值发送的,因此被复制到函数中,对吗?因此,一旦函数终止,v完成后,v所做的任何事情都将毫无用处。generate_next_float()超出范围,被删除。

我是对的吗?

也就是说,函数vector可能会做某事,所以没有用,但是f在这里的使用似乎毫无意义。 {{1}}不依赖于它,也不会返回任何内容。

3 个答案:

答案 0 :(得分:0)

是的,就向量而言,generate()函数是没有意义的; <{1}}的更改对调用者不可见。

我有一种感觉,v的作者错过了通过引用作为忽视,而不是作为计划: - )

答案 1 :(得分:0)

好吧,考虑到std容器不进行隐式数据共享,这意味着你将一个新的深拷贝传递给函数,将float推回到新的拷贝中,然后在函数结束后将其丢弃。所以,对我来说,看起来你是对的。

答案 2 :(得分:0)

在这个函数中,std :: vector v不会改变,因为你没有给矢量作为参考。它只是在函数中复制而复制更改但不是原始复制。您可以使用:

void generate(std::vector<float> &v) //input given as reference
{
  float f = generate_next_float();
  v.push_back(f);
}