替换向量中的子向量

时间:2012-12-07 09:23:37

标签: c++ vector

我有

vector<int> my_vector;
vector<int> other_vector;

my_vector.size() == 20other_vector.size() == 5

鉴于int n0 < n < 14,我想用{{替换子向量(my_vector[n]myvector[n+1],...,myvector[n+4]) 1}}。

肯定有愚蠢的代码

other_vector

我已经完成了,但我想知道是否有更有效的方法来做到这一点。有什么建议吗?

(当然,数字20和5只是一个例子,在我的情况下,我有更大的尺寸!)

3 个答案:

答案 0 :(得分:7)

在C ++ 11中,添加了友好函数std::copy_n,因此您可以使用它:

 std::copy_n(other_vector.begin(), 5, &my_vector[n]);

在C ++ 03中,您可以使用std::copy,因为其他答案已经提到过了。

答案 1 :(得分:4)

您可以使用std::copy

// Get the first destination iterator
auto first = std::advance(std::begin(my_vector), n);

// Do the copying
std::copy(std::begin(other_vector), std::end(other_vector), first);

虽然这与你天真的解决方案基本相同。

答案 2 :(得分:1)

我不了解性能,但更简洁的版本是使用std::copy

std::copy(other_vector.begin(),other_vector.end(),my_vector.begin()+n);

对于最小 - 最大性能,或许(?)memcpy就是答案..

memcpy(my_vector.begin()+n, other_vector.begin(), sizeof(int) *other_vector.size());