我正在尝试从函数返回一个向量。但是如果我返回整个向量,那么复制过程将花费额外的时间,所以我试图仅返回对向量的引用。我怎么用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);
答案 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)
您可以只返回向量的值,也可以通过引用将向量作为参数传递给函数。