我需要替换向量中的一系列元素

时间:2014-09-11 10:28:14

标签: c++ vector stl

我有一定大小的std::vector,需要将另一个矢量(大小为34)的内容分配到位置34 ... 67.原始矢量的大小不应该改变。看看矢量API

  • assign()不起作用,因为它取代了所有元素。

  • swap()不起作用,因为它取代了所有元素。

  • emplace()不起作用,因为它会创建一个新元素。

  • reserve(),然后循环at()会起作用,但避免循环会很好。

  • memcpy(target.data [34],source.data(),34 * sizeof(T))可以在没有循环的情况下工作,但看起来像是一个C hack。

  • std::copy可以很好地工作,但隐藏循环我希望它比memcpy()慢。

元素是整数。在更改向量中的元素范围时,哪个应该是默认方法?

2 个答案:

答案 0 :(得分:5)

std::copy是替换向量的有限范围内的值的好方法。

根本不考虑memcpy,因为它是非POD项目的UB。

std::copy这样的算法通常是优化的,可能是特殊的二进制可复制类型。也就是说,他们会自动执行Right Thing™。如果您对性能有疑问, MEASURE

答案 1 :(得分:1)

如果您的类型很简单,那么使用std::copy它可能会优化为memcopy

否则如果你插入的矢量在插入之后被销毁,那么它很复杂,你可以尝试std::swap_ranges,保存一个调用以进行移动。

正如阿尔夫已经指出措施是一件好事。