当程序中要返回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.youkuaiyun.com/xll_bit/article/details/103308816