8

我有

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

和。my_vector.size() == 20_other_vector.size() == 5

给定int n, with 0 < n < 14, 我想用 . 替换子向量 ( , my_vector[n], myvector[n+1]..., myvector[n+4])other_vector

肯定有愚蠢的代码

 for(int i=0; i<5; i++)
 {
      my_vector[n+i] = other_vector[i];
 }

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

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

4

3 回答 3

9

在 C++11 中,增加了一个友好的函数std::copy_n,所以你可以使用它:

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

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

于 2012-12-07T09:34:33.430 回答
5

你可以使用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);

尽管这基本上与您的幼稚解决方案相同。

于 2012-12-07T09:30:37.943 回答
2

我不知道性能,但更清洁的版本将是使用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());
于 2012-12-07T09:27:58.840 回答