【发布时间】:2014-04-14 23:34:41
【问题描述】:
我必须在 C++ 中定义一个函数来生成类 Foo 的向量并返回它。
我可以用不同的方式定义它,它们都是相当的:
C风格参数传递:
void generateFooVector(vector<Foo> * result)
{
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo> result;
generateFooVector(&result);
}
参考传递传递:
void generateFooVector(vector<Foo> & result)
{
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo> result;
generateFooVector(result);
}
实例化向量并返回指针:
vector<Foo> * generateFooVector()
{
vector<Foo> * result = new vector<Foo>();
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
return result;
}
int main()
{
vector<Foo> * result = generateFooVector();
}
C 风格的传递和实例化 Foo 类:
void generateFooVector(vector<Foo *> * result)
{
for (int i = 0; i < 100; i++)
{
Foo * f = new Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo *> result;
generateFooVector(&result);
}
引用传递 + Foo 实例:
void generateFooVector(vector<Foo *> & result)
{
for (int i = 0; i < 100; i++)
{
Foo * f = new Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo *> result;
generateFooVector(result);
}
Vector 实例 + Foo 实例:
vector<Foo*> * generateFooVector()
{
vector<Foo*> * result = new vector<Foo*>();
for (int i = 0; i < 100; i++)
{
Foo * f = new Foo();
result->push_back(f);
}
return result;
}
int main()
{
vector<Foo *> * result = generateFooVector();
}
按值传递:
vector<Foo> generateFooVector()
{
vector<Foo> result;
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
return result;
}
int main()
{
vector<Foo > result = generateFooVector();
}
也许还有很多其他的解决方案。
所有当前的方式在范围内如何分配内存都有不同的含义。
也许我缺乏理论,但我真的很困惑如何确定每个用例的更好选择,以及为什么一个比另一个更好。你能帮帮我吗?
【问题讨论】:
-
注意:使用
std::generate。 -
@Tacet,或
reserve和std::back_inserter。如果您每次都需要调用该函数,std::fill就没有用了,但这里可能就是这种情况。 -
@chris 我知道这很重要,但这只是一个例子。那不是重点。我在问如何返回元素集合。
标签: c++ vector parameter-passing instance pass-by-reference