8

私は持っている

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]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]);

std::copyC ++ 03では、他の回答がすでに述べたように使用できます。

于 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 に答える