如何正确地从函数返回向量以避免额外的复制?

How should I properly return a vector from a function to avoid extra copying?

本文关键字:复制 正确地 函数 向量 返回      更新时间:2023-10-16

我应该如何正确地返回一个向量从一个函数到一个无效的额外复制?

如果我只返回一个向量,那么我应该在函数中创建一个向量然后在返回时,它会被复制到结果中。但我想避免这种情况。然后我想我应该在堆上创建向量并返回指向它的指针向量* ?

谢谢

c++标准允许编译器在某些情况下消除此复制(第12.8.5节)。很难判断编译器是否真的做到了这一点,因此您应该阅读它的文档或查看生成的汇编代码。所以最好让你的编译器为你做优化。

但如果你真的喜欢手工优化(你不应该),请继续阅读。

在堆上分配vector并返回指向它的指针是一件不好的事情,因为在这种情况下,不清楚谁对该对象负责,谁将进行内存清理。

让你的函数接受一个额外的参数——指向一个要存储结果的向量的引用或指针——是更好的方法。

我将把一个引用作为参数传递给它。

void foo(std::vector& bas)
{
// do code here
}