コンテナの要素位置を移動する

ちょっと必要になったので、書いてみました。

vector中のbefore番目にある要素を、after番目に移動します。

#include <vector>
#include <utility>

// 要素の位置を移動させる
template <class T>
void move_position(std::vector<T>& v, std::size_t before, std::size_t after)
{
    T x = std::move(v[before]);
    v.erase(v.begin() + before);
    v.insert(v.begin() + after, std::move(x));
}

#include <boost/detail/lightweight_test.hpp>
#include <boost/range/algorithm/equal.hpp>
int main()
{
    {
        std::vector<int> v = {1, 2, 3};
        move_position(v, 2, 0);

        const std::vector<int> expected = {3, 1, 2};
        BOOST_TEST(boost::equal(v, expected));
    }
    {
        std::vector<int> v = {1, 2 ,3};
        move_position(v, 0, 2);

        const std::vector<int> expected = {2, 3, 1};
        BOOST_TEST(boost::equal(v, expected));
    }
    {
        std::vector<int> v = {1, 2, 3};
        move_position(v, 1, 2);

        const std::vector<int> expected = {1, 3, 2};
        BOOST_TEST(boost::equal(v, expected));
    }
    return boost::report_errors();
}