我有一定大小的std::vector
,需要将另一个矢量(大小为34)的内容分配到位置34 ... 67.原始矢量的大小不应该改变。看看矢量API
assign()不起作用,因为它取代了所有元素。
swap()不起作用,因为它取代了所有元素。
emplace()不起作用,因为它会创建一个新元素。
memcpy(target.data [34],source.data(),34 * sizeof(T))可以在没有循环的情况下工作,但看起来像是一个C hack。
std::copy可以很好地工作,但隐藏循环我希望它比memcpy()慢。
元素是整数。在更改向量中的元素范围时,哪个应该是默认方法?
答案 0 :(得分:5)
std::copy
是替换向量的有限范围内的值的好方法。
根本不考虑memcpy
,因为它是非POD项目的UB。
像std::copy
这样的算法通常是优化的,可能是特殊的二进制可复制类型。也就是说,他们会自动执行Right Thing™。如果您对性能有疑问, MEASURE 。
答案 1 :(得分:1)
如果您的类型很简单,那么使用std::copy
它可能会优化为memcopy
。
否则如果你插入的矢量在插入和之后被销毁,那么它很复杂,你可以尝试std::swap_ranges
,保存一个调用以进行移动。
正如阿尔夫已经指出措施是一件好事。