如何将数据复制到另一个向量?

mar*_*zzz 3 c++ optimization stl

我想说:

const int MAX_BUFFER = 1024;
std::vector<double> AV(MAX_BUFFER);
std::vector<double> CV{ AV };
Run Code Online (Sandbox Code Playgroud)

怎么AV复制成CV

如果我使用doubles 数组(即double[]),它需要更多(在MSVC上尝试使用分析器/Oi):

for (int sampleIndex = 0; sampleIndex < MAX_BUFFER; sampleIndex++) {
    C[sampleIndex] = A[sampleIndex];
}
Run Code Online (Sandbox Code Playgroud)

它如何更快地复制?我怎么能用C++数组标准做同样的事情?

Lig*_*ica 7

这绝对肯定很难回答,因为它取决于你的工具链和你的优化水平以及(在某种程度上)命运.

我希望强大的编译器可以将您的循环优化为memcpy不需要计数器和单个值副本的循环.或许不是.当然看起来你的不这样做.

我肯定希望矢量副本能够做到这一点(因为无论谁编写vector实现都是聪明的,并且会发现这个机会).

最终你必须阅读实现的源代码才能确定.

如果要尽快复制double[]内容,请使用std::copy.

应该执行该优化.当然它不会比你的循环慢,而且可能更快.如果由于某种原因它不是,你也可以尝试直接memcpy(虽然这消除了类型安全).


为什么memcpy更快?

只要他们事先知道这就是你想要做的事情,计算机就可以一步到位地捣毁字节块.

事实上,这是编写"说出你的意思"的代码的一个很好的教训,让计算机决定如何去做,而不是拼出你认为任务需要的各个步骤,从而使计算机更难尽可能以最好的方式做你真正的意思.

在这种情况下,"计算机"是标准库实现,编译器和CPU的无定形伙伴关系.