我有
vector<int> my_vector;
vector<int> other_vector;
my_vector.size() == 20
和other_vector.size() == 5
。
鉴于int n
,0 < n < 14
,我想用{{替换子向量(my_vector[n]
,myvector[n+1]
,...,myvector[n+4]
) 1}}。
肯定有愚蠢的代码
other_vector
我已经完成了,但我想知道是否有更有效的方法来做到这一点。有什么建议吗?
(当然,数字20和5只是一个例子,在我的情况下,我有更大的尺寸!)
答案 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());