【发布时间】:2013-10-31 10:04:43
【问题描述】:
我有一个函数可以返回这样的数组:
vector<string> GetString()
{
vector<string> s;
s.push_back("one");
s.push_back("two");
s.push_back("three");
return s;
}
我这样称呼它:
vector<string> mystrings=GetStrings();
我也可以如下实现:
void GetString(vector<string> & s)
{
s.push_back("one");
s.push_back("two");
s.push_back("three");
}
并以这种方式调用它:
vector<string> mystrings;
GetStrings(mystrings);
哪个更好?
第一个版本是否将向量复制到另一个?如果是,那么如果向量很大,它就会很慢。
【问题讨论】:
-
直接返回吧,副本很可能会被省略,代码更干净。
-
这些函数做不同的事情(构建一个新的向量与扩展一个现有的向量)。如果您想构建一个新的,则按值返回它。如果您想扩展现有的,请参考。
-
第一种方式更好。不,它并不慢。
-
Want speed? Pass by value.(谷歌这个短语,以防原始文章被关闭;经常发生这种情况)。