我有一个返回如下数组的函数:
vector<string> GetString()
{
vector<string> s;
s.push_back("one");
s.push_back("two");
s.push_back("three");
return s;
}
Run Code Online (Sandbox Code Playgroud)
我用这种方式称呼它:
vector<string> mystrings=GetStrings();
Run Code Online (Sandbox Code Playgroud)
我也可以按如下方式实现:
void GetString(vector<string> & s)
{
s.push_back("one");
s.push_back("two");
s.push_back("three");
}
Run Code Online (Sandbox Code Playgroud)
并以这种方式调用它:
vector<string> mystrings;
GetStrings(mystrings);
Run Code Online (Sandbox Code Playgroud)
哪一个更好?
版本1是否将矢量复制到另一个?如果是,那么如果向量很大则它很慢.
Mik*_*our 17
哪一个更好?
他们做不同的事情.如果你想要一个只包含那些字符串的向量,请使用第一个; 如果您希望能够将这些字符串附加到现有向量,请使用第二个.
如果你想要第一个版本的语义,那么在更容易正确使用和更难以正确使用的意义上,这是"更好".
版本1是否将矢量复制到另一个?
在现代C++中,绝对不是:返回局部变量并从临时初始化都是通过移动而不是复制来完成的.即使你坚持使用前C++ 11编译器,也应该省略这两个副本.如果你的编译器不支持移动语义或复制省略,那么你真的应该抛弃它.