如何从函数返回向量引用?

时间:2014-04-14 11:49:23

标签: c++ algorithm vector

我正在尝试从函数返回一个向量。但是如果我返回整个向量,那么复制过程将花费额外的时间,所以我试图仅返回对向量的引用。我怎么用C ++做到这一点?这是我目前的职能,

vector<ii>& primeFactors(int n)
    {
        int i;
        vector<ii> factors;
        for(i=0; i<=n && n!=1 ; ++i)
        {
            int cnt = 0;
            while((n%primes[i]) == 0)
            {
                ++cnt;
                n/=primes[i];
            }
            if(cnt!=0)
                factors.push_back({primes[i],cnt});
        }
        if(i == lim)
            factors.push_back({n,1});



        return factors;
    }

并且我在main()

中打电话
vector<ii> factors = primes.primeFactors(20);

3 个答案:

答案 0 :(得分:4)

  

但是如果我返回整个向量,那么复制过程会花费额外的时间,所以我试图仅返回对向量的引用。

不要担心这一点。编译器将通过RVO优化调用(返回值优化)并删除副本。只需按值返回向量:

std::vector<ii> primeFactors(int n) { … }

答案 1 :(得分:2)

正如其他人所说,你应该只返回载体。

但是,无论出于何种原因,你真的想要返回一个参考,你必须确保它&#34;生活&#34;退出功能后。对于局部变量,就像你的代码一样。

相反,您可以将该函数包装在一个类中,并将该向量作为成员:

class PrimeFactorCalculator
{
public:
    std::vector<ii>& primeFactors(int n)
    {
        // ...

        return m_resultVector;
    }

private:
    std::vector<ii> m_resultVector;
};

答案 2 :(得分:0)

您可以只返回向量的值,也可以通过引用将向量作为参数传递给函数。