質問

たいへのシフト要素コンテナ内の任意の位置にします。の移動要素のない連続した.

e.gいベクトル{1,2,3,4,5,6,7,8}たいフ{4,5,7}の左上2位の予結果{1,4,5,2,7,3,6,8}

ある優雅な解決方法の一つです。

役に立ちましたか?

解決

で記入することができず。このシンプルな一:

#include <iterator>
#include <algorithm>

template <typename Container, typename ValueType, typename Distance>
void shift(Container &c, const ValueType &value, Distance shifting)
{
    typedef typename Container::iterator Iter;

    // Here I assumed that you shift elements denoted by their values;
    // if you have their indexes, you can use advance
    Iter it = find(c.begin(), c.end(), value);
    Iter tmp = it;

    advance(it, shifting);

    c.erase(tmp);

    c.insert(it, 1, value);
}

を利用できますようにする:

vector<int> v;
// fill vector to, say, {1,2,3,4,5}
shift(v, 4, -2); // v = {1,4,2,3,5}
shift(v, 3, 1); // v = {1,4,2,5,3}

これは素朴実施できずに複数の要素 find 繰り返し処理を実行しの始ます。また、この全ての要素を得ることができない場合がある。しかし、あなたにとってどんな年でしたただのヒントに実装方法"で作られています。

他のヒント

できない簡単に挿入して消去?

ることを忘れないでくださいまを無効にする他の反復子を参照する要素の削除や挿入ポイントのいずれかまで見ることができます。

HTH

声で

Rob

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top