【C++】 函数返回vector

当程序中要返回vector时,一般做法会将函数直接定义为:

vector<T> func(){
    //TODO
}

而为了提高执行效率,可以直接返回该vector的引用,这样会减少vector的多次拷贝。具体写法如下:

vector<T>& func(){
    //TODO
}

但要注意的是,该要返回的vector不能是函数内部的局部变量。

如下是对两种返回方式的测试:

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

class vec{
private:
  vector<int> v1;
  vector<int> v2;
public:
  vector<int> getv1(){
    return v1;
  }
  vector<int>& getv2(){
    return v2;
  }
  void setv(){
    for(int i=0;i<10000;i++){
      v1.push_back(i);
      v2.push_back(i+1);
    }
  }
};
int main(){
  vec c1;
  c1.setv();
  for(int i=0;i<100000;i++){
    vector<int> v1 = c1.getv1();
    vector<int>& v2 = c1.getv2();
    int len1 = v1.size();
    int len2 = v2.size();
    int len = min(len1,len2);

    for(int j=0;j<len/100;j++){
      v1[j] += v2[j];
    }

  }
}

对上面的程序,getv1()为直接返回vector,getv2()为返回vector的引用,根据pgprof可以看出,有大量的时间浪费在了getv1()这个函数上面。

附:如何分析程序性能,可参考:https://blog.csdn.net/xll_bit/article/details/103308816

发布了46 篇原创文章 · 获赞 14 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/xll_bit/article/details/104655079