如何从函数返回向量引用?
Posted
技术标签:
【中文标题】如何从函数返回向量引用?【英文标题】:How to return a vector reference from a function? 【发布时间】:2014-04-14 11:49:23 【问题描述】:我正在尝试从函数返回一个向量。但是如果我返回整个向量,那么复制过程会花费额外的时间,所以我试图只返回对向量的引用。我如何在 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);
【问题讨论】:
只返回一个值。在这种情况下返回引用是没有意义的。 how to "return an object" in C++的可能重复 @juanchopanza 在这种情况下不是,但在很多情况下这是有意义的。 你尝试的不是一个好主意,因为不应该返回对局部变量的引用。 如果你想这样做,你需要将向量作为函数的引用参数,并传递一个向量来存储函数外部的结果。记得先清除向量。这可以让您重用相同的向量,这在某些情况下可能会更高效。 【参考方案1】:但是如果我返回整个向量,那么复制过程会花费额外的时间,所以我试图只返回对向量的引用。
别担心。编译器将通过RVO(返回值优化)优化调用并忽略副本。只需按值返回向量:
std::vector<ii> primeFactors(int n) …
【讨论】:
【参考方案2】:正如其他人所说,您应该只返回向量。
但如果出于某种原因您真的想要返回一个引用,您必须确保它在退出函数后“存在”。这不是在您的代码中使用局部变量的情况。
相反,您可以将函数包装在一个类中,并将向量作为成员:
class PrimeFactorCalculator
public:
std::vector<ii>& primeFactors(int n)
// ...
return m_resultVector;
private:
std::vector<ii> m_resultVector;
;
【讨论】:
【参考方案3】:您可以只返回向量的值,也可以通过引用将向量作为参数传递给函数。
【讨论】:
以上是关于如何从函数返回向量引用?的主要内容,如果未能解决你的问题,请参考以下文章