Jab*_*bba 3 c++ reference vector
如何将以下Java代码正确地转换为C++?
Vector v;
v = getLargeVector();
...
Vector getLargeVector() {
Vector v2 = new Vector();
// fill v2
return v2;
}
Run Code Online (Sandbox Code Playgroud)
所以这v是一个参考.该函数创建一个新的Vector对象并返回对它的引用.干净整洁.
但是,让我们看看以下C++镜像转换:
vector<int> v;
v = getLargeVector();
...
vector<int> getLargeVector() {
vector<int> v2;
// fill v2
return v2;
}
Run Code Online (Sandbox Code Playgroud)
现在v是一个矢量对象,如果我理解正确,v = getLargeVector()将复制函数返回的向量中的所有元素v,这可能很昂贵.此外,v2在堆栈上创建并返回它将导致另一个副本(但我知道现代编译器可以优化它).
目前我正是这样做的:
vector<int> v;
getLargeVector(v);
...
void getLargeVector(vector<int>& vec) {
// fill vec
}
Run Code Online (Sandbox Code Playgroud)
但我觉得这不是一个优雅的解决方案.
所以我的问题是:做到这一点的最佳做法是什么(通过避免不必要的复制操作)?如果可能的话,我想避免正常的指针.到目前为止,我从未使用智能指针,我不知道他们是否可以在这里提供帮助.
大多数C++编译器实现了返回值优化,这意味着您可以从函数中有效地返回类,而无需复制所有对象的开销.
我还建议你写:
vector<int> v(getLargeVector());
Run Code Online (Sandbox Code Playgroud)
这样你就可以复制构造对象而不是默认构造,然后运算符赋值给它.
| 归档时间: |
|
| 查看次数: |
3893 次 |
| 最近记录: |