[英]std::vector<char> into std::vector<T> conversion c++
我想从长度为len * (sizeof T)
的std::vector<char>
中包含的序列化数据创建长度为len
的std::vector<T>
,在没有必要的情况下不复制数据(对于,例如,对齐要求T
)。 换句话说,我正在寻找以下代码的优化,并在相同的保证下运行:
template<typename T>
auto copyStuff(std::vector<char>&&input) {
std::vector<T> result;
result.resize(input.size()/(sizeof T));
for (int i=0; i < result.size(); i++) {
memcpy(&result[i], &input[i * (sizeof T)], sizeof T);
}
return result;
}
哪一个
memcpy
调用中复制所有字节 是否有标准方法或可移植库来实现这一目标(或“足够好”的近似值)?
说明:
T
是可微复制的,输入std::vector<char>
的布局就是我要构造的项的内存表示形式的串联。 vector
),如果它们提供这种低开销的类型修剪。 如果没有复制,则不可能从另一种类型中获得一种类型的向量。
通过首先构造T
(足够大)的向量,然后不使用chars的中间向量,直接将序列化的数据写入该向量,就可以避免一组副本。
一些警告:
T
必须是平凡可复制的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.