#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";
}
ICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAjaW5jbHVkZSA8dmVjdG9yPgoKCXRlbXBsYXRlPGNsYXNzIFZhbHVlVHlwZT4KCWJvb2wgdW5zdGFibGVfcmVtb3ZlKAoJCXR5cGVuYW1lIHN0ZDo6dmVjdG9yPFZhbHVlVHlwZT4mIGNvbnRhaW5lciwKCQl0eXBlbmFtZSBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+OjppdGVyYXRvciBpdAoJCSkKCXsKCQlhdXRvIGxhc3RFbCA9IGNvbnRhaW5lci5lbmQoKSAtIDE7CgkJaWYgKGl0ICE9IGxhc3RFbCkKCQkJKml0ID0gc3RkOjptb3ZlKCpsYXN0RWwpOwoJCWNvbnRhaW5lci5wb3BfYmFjaygpOwoJfQoKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGludHMgeyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OwogICAgICAgIGF1dG8gaXQgPSBpbnRzLmJlZ2luKCksIGVuZCA9IGludHMuZW5kKCk7CiAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgewogICAgICAgICAgICBpZiAoKCppdCAlIDMpID09IDApIHsKICAgICAgICAgICAgICAgIHVuc3RhYmxlX3JlbW92ZShpbnRzLCBpdCk7CiAgICAgICAgICAgICAgICAvLyBkbyBub3QgcGFzcyBnbyAvICsraXQKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICsraXQ7CiAgICAgICAgfQogICAgICAgIHN0ZDo6Y291dCA8PCAiYWZ0ZXIgcmVtb3ZlczpcbiI7CiAgICAgICAgZm9yIChhdXRvIHZhbCA6IGludHMpCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCB2YWwgPDwgIiAiOwogICAgICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogICAgICAgIHN0ZDo6c29ydChpbnRzLmJlZ2luKCksIGludHMuZW5kKCkpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiYWZ0ZXIgc29ydDpcbiI7CiAgICAgICAgZm9yIChhdXRvIHZhbCA6IGludHMpCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCB2YWwgPDwgIiAiOwogICAgICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogICAgfQo=