c++ - 从 C++ 中的函数返回 vector 的最佳方法是什么

标签 c++ stl

<分区>

我有一个返回数组的函数,如下所示:

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);

哪个更好?

第一个版本是否将 vector 复制到另一个?如果是,那么如果 vector 很大,它会很慢。

最佳答案

Which one is better?

他们做不同的事情。如果您想要一个仅包含这些字符串的 vector ,请使用第一个;如果您希望能够将这些字符串附加到现有 vector ,请使用第二个。

如果您想要第一个版本的语义,那么从更容易正确使用和更难错误使用的意义上说,这是“更好”的。

Is version one copies a vector to another?

在现代 C++ 中,绝对不是:返回局部变量和从临时变量初始化都是通过移动而不是复制来完成的。即使您坚持使用 C++11 之前的编译器,也应该省略两个拷贝。如果您的编译器不支持移动语义或复制省略,那么您真的应该扔掉它。

关于c++ - 从 C++ 中的函数返回 vector 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519505/

相关文章:

c++ - 为什么 AddVector CUDA c++ 不起作用?

c++ - IAT Hook 但未调用 Hook 函数

c++ - 在静态编译和链接时保持共享库插件系统的结构

c++ - std::spanstream 通常如何在 C++ 中使用?

c++ - 为什么我不能执行 std::map.begin() + 1?

c++ - std::multimap 中的 count() 和 find() 问题

c++ - 矩阵模板库矩阵求逆

c++ - 在 c/c++ 代码中使用什么宏来识别 Mavericks OSX 10.9?

c++ - STL拷贝效率

c++ - 如何查看 map 中是否存在键?