19

があり、元のベクトルの最後のn個の要素のみを含むstd::vector別の要素が必要です。std::vector1つずつ挿入するベクトル全体のループに加えて、これを行うためのよりクリーンな方法はありますか?

4

2 に答える 2

27
int n = 5;
std::vector<int> x = ...;
std::vector<int> y(x.end() - n, x.end())

もちろん、x.size()<nの場合、これはクラッシュして燃えます

少し詳しく説明すると、std::vector(ほとんどの標準ライブラリコンテナと同様に)イテレータのペアを受け取るコンストラクタがあります。最初のイテレータから2番目のイテレータまでのすべてのアイテムでベクトルを埋めます。

于 2012-07-30T16:05:13.183 に答える
1

copyVector2つのイテレータコンストラクタを使用して直接構築できます。

std::vector<int> original = ...;
std::vector<int>::iterator start = std::next(original.begin(), M);
std::vector<int> copyVector(start, original.end());

または、std::vector割り当てメソッドを使用します。

std::vector<int>::iterator start = std::next(original.begin(), M);
std::vector<int> copyVector = ... ;
...
copyVector.assign(start, original.end());

ここMで、はとから計算されoriginal.size()ますn

于 2012-07-30T16:07:33.877 に答える