繁体   English   中英

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

[英]How vector copy data to another vector?

我想说:

const int MAX_BUFFER = 1024;
std::vector<double> AV(MAX_BUFFER);
std::vector<double> CV{ AV };

AV如何复制到CV

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

for (int sampleIndex = 0; sampleIndex < MAX_BUFFER; sampleIndex++) {
    C[sampleIndex] = A[sampleIndex];
}

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

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

我希望有一个强大的编译器来优化你的循环到一个不需要计数器和单个值副本的memcpy 或许不是。 当然看起来你的不这样做。

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

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

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

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


为什么memcpy更快?

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

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

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

使用标准算法,您可以使用数组实现类似的简洁性和可读性:

std::copy(A, A + MAX_BUFFER, B);

就速度而言,它取决于标准库的实现方式,以及编译器如何优化循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM