3

ループせずにC++で配列の内容をstd::vectorにコピーするにはどうすればよいですか? 配列の内容をベクトルに単純にコピーする方法の良い例があります。

同じ手法を使用して、ベクターの一部を別のベクターにコピーできますか?

例えば

vector<int> v;

// ...v has some number of elements and we're interested in an 
// arbitrary number (y) from an arbitrary start point (x)...

vector<int> v2(&v[x], &v[x + y]);
4

2 に答える 2

12

はい、イテレータを使用します:

vector<int> v2(v.begin() + x, v.begin() + x + y);

必要に応じて、もう少し一般的なものにすることができます。

vector<int> v2(std::next(std::begin(v), x), std::next(std::begin(v), x + y));

ポインター バージョン (両方の引数に対して配列が崩壊する) が最初に機能する理由は、ポインターをランダム アクセス反復子として扱うことができるからです。

于 2013-07-04T07:32:50.633 に答える
2

私はこれがうまくいくと信じています:

vector<int> v2( v.begin() + x, v.begin() + x + y );

この他の以前の回答には、より多くの情報があります: Best way to extract a subvector from a vector?

于 2013-07-04T07:36:49.037 に答える