返回向量vs使用向量的参数返回它

Aud*_*oid 15 c++ return vector

使用下面的代码,问题是:

如果使用"returnIntVector()"函数,向量是否从本地复制到"外部"(全局)范围?换句话说,与"getIntVector()" - 函数相比,它是一个更多的时间和内存消耗变化吗?(但提供相同的功能.)

#include <iostream>
#include <vector>
using namespace std;

vector<int> returnIntVector()
{
   vector<int> vecInts(10);
   for(unsigned int ui = 0; ui < vecInts.size(); ui++)
      vecInts[ui] = ui;

   return vecInts;
}

void getIntVector(vector<int> &vecInts)
{
   for(unsigned int ui = 0; ui < vecInts.size(); ui++)
      vecInts[ui] = ui;
}

int main()
{
   vector<int> vecInts = returnIntVector();
   for(unsigned int ui = 0; ui < vecInts.size(); ui++)
      cout << vecInts[ui] << endl;
   cout << endl;

   vector<int> vecInts2(10);
   getIntVector(vecInts2);
   for(unsigned int ui = 0; ui < vecInts2.size(); ui++)
      cout << vecInts2[ui] << endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 18

理论上,是的,它被复制了.实际上,不,大多数现代编译器都会利用返回值优化.

因此,您可以编写语义正确的代码.如果您想要一个修改或检查值的函数,可以通过引用将其引入.您的代码不会这样做,它会创建一个不依赖于其他任何内容的新值,因此按值返回.


Naw*_*waz 9

使用第一种形式:返回向量的形式.一个好的编译器很可能会优化它.优化通常称为返回值优化,或简称为RVO.