【发布时间】:2018-10-27 07:05:09
【问题描述】:
假设我有这个:
const int MAX_BUFFER = 1024;
std::vector<double> AV(MAX_BUFFER);
std::vector<double> CV{ AV };
AV如何复制到CV?
如果我使用doubles 的数组(即double[])也有相同的情况,则需要更多(在MSVC 和/Oi 上使用分析器尝试):
for (int sampleIndex = 0; sampleIndex < MAX_BUFFER; sampleIndex++) {
C[sampleIndex] = A[sampleIndex];
}
它如何更快地复制?如何使用 C++ 数组标准做同样的事情?
【问题讨论】:
-
你的意思是什么?这取决于优化级别,可能会在 /O3 中使用 memcpy。
-
使用
std::memcpy。 -
请注意,优化取决于向量的
value_type。对于 POD(普通、旧数据)类型,例如double和int,可能会使用std::memcpy来实现最佳性能。对于非POD类型(如std::string),不能使用std::memcpy -
你知道std::copy吗?它应该选择最快的方法。但我会对您测试的代码感兴趣。
-
std::vector构造函数以及std::copy()通常对在内部使用memcpy()的 POD 类型进行专门化。
标签: c++ optimization stl