【C++】 函数返回vector

本文通过对比分析C++中直接返回vector与返回vector引用的方法,展示如何通过引用减少内存拷贝,从而显著提升程序执行效率。通过具体代码示例和性能测试,详细解释了两种方式的差异及引用返回的适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当程序中要返回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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值