    #include <algorithm>
    #include <iostream>
    #include <vector>

	template<class ValueType>
	bool unstable_remove(
		typename std::vector<ValueType>& container,
		typename std::vector<ValueType>::iterator it
		)
	{
		auto lastEl = container.end() - 1;
		if (it != lastEl)
			*it = std::move(*lastEl);
		container.pop_back();
	}

    int main()
    {
        std::vector<int> ints { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        auto it = ints.begin(), end = ints.end();
        while (it != end) {
            if ((*it % 3) == 0) {
                unstable_remove(ints, it);
                // do not pass go / ++it
                continue;
            }
            ++it;
        }
        std::cout << "after removes:\n";
        for (auto val : ints)
            std::cout << val << " ";
        std::cout << "\n";
        std::sort(ints.begin(), ints.end());
        std::cout << "after sort:\n";
        for (auto val : ints)
            std::cout << val << " ";
        std::cout << "\n";
    }
