gpt4 book ai didi

c++ - 从函数发回 vector

转载 作者:太空狗 更新时间:2023-10-29 19:45:02 24 4
gpt4 key购买 nike

如何将以下 Java 代码正确翻译成 C++?

Vector v;
v = getLargeVector();
...
Vector getLargeVector() {
Vector v2 = new Vector();
// fill v2
return v2;
}

所以这里的v是一个引用。该函数创建一个新的 Vector 对象并返回对它的引用。漂亮干净。

但是,让我们看看下面的 C++ 镜像翻译:

vector<int> v;
v = getLargeVector();
...
vector<int> getLargeVector() {
vector<int> v2;
// fill v2
return v2;
}

现在 v 是一个 vector 对象,如果我理解正确的话,v = getLargeVector()复制 vector 中的所有元素由函数返回到 v,这可能很昂贵。此外,v2 是在堆栈上创建的,返回它会产生另一个拷贝(但据我所知,现代编译器可以优化它)。

目前我是这样做的:

vector<int> v;
getLargeVector(v);
...
void getLargeVector(vector<int>& vec) {
// fill vec
}

但我认为这不是一个优雅的解决方案。

所以我的问题是:最好的做法是什么(通过避免不必要的复制操作)?如果可能的话,我想避免使用普通指针。到目前为止,我从未使用过智能指针,我不知道他们是否可以在这里提供帮助。

最佳答案

大多数 C++ 编译器实现 return value optimization这意味着您可以高效地从函数返回一个类,而无需复制所有对象的开销。

我还建议你写:

vector<int> v(getLargeVector());

这样您就可以复制构造对象而不是默认构造,然后将运算符分配给它。

关于c++ - 从函数发回 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2025287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com