gpt4 book ai didi

c++ - vector如何将数据复制到另一个vector?

转载 作者:太空狗 更新时间:2023-10-29 19:47:37 32 4
gpt4 key购买 nike

假设我有这个:

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

AV是如何复制到CV中的?

如果我使用 double 数组(即 double[])也有相同的效果,则需要更多(尝试使用 MSVC 和 上的分析器/喂):

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

它如何复制得更快?我怎样才能对 C++ 数组标准做同样的事情?

最佳答案

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

我可能希望有一个强大的编译器将您的循环优化为不需要计数器和单个值拷贝的 memcpy。也许不是。当然,您的似乎没有这样做。

我绝对希望 vector 拷贝能够做到这一点(因为编写 vector 实现的人很聪明,并且会发现这个机会)。

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

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

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


为什么 memcpy 更快?

只要计算机预先知道这是您想要执行的操作,它们就可以快速地一次性发送字节 block 。

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

在此上下文中,“计算机”是标准库实现、编译器和 CPU 的无定形伙伴关系。

关于c++ - vector如何将数据复制到另一个vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53006724/

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