#include <cstdio>
#include <vector>
#include <algorithm>
void print_vec(const char * msg = 0, const std::vector<int> & v = std::vector<int>()) {
printf("%s", msg ? msg : "");
for (auto x : v)
printf(" %d", x);
printf("\n");
}
template <class _Container, class _Predicate>
void remove_if_and_resize(_Container & c, _Predicate p) {
auto new_end = std::remove_if(c.begin(), c.end(), p);
c.erase(new_end, c.end());
}
int main() {
{
int value = 3;
std::vector<int> v = {1, 2, 3, 4, 5};
print_vec("Before :", v);
auto new_end = std::remove_if(v.begin(), v.end(), [value] (int x) { return x < value; });
print_vec("After remove_if :", v);
v.erase(new_end, v.end());
print_vec("After erase:", v);
}
{
int value = 2;
std::vector<int> v = {1, 2, 3, 4, 5};
print_vec("Before :", v);
remove_if_and_resize(v, [value] (int x) { return x > value; });
print_vec("After remove_if_and_resize :", v);
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnZvaWQgcHJpbnRfdmVjKGNvbnN0IGNoYXIgKiBtc2cgPSAwLCBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+ICYgdiA9IHN0ZDo6dmVjdG9yPGludD4oKSkgewogICAgcHJpbnRmKCIlcyIsIG1zZyA/IG1zZyA6ICIiKTsKICAgIGZvciAoYXV0byB4IDogdikKICAgICAgICBwcmludGYoIiAlZCIsIHgpOwogICAgcHJpbnRmKCJcbiIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX1ByZWRpY2F0ZT4Kdm9pZCByZW1vdmVfaWZfYW5kX3Jlc2l6ZShfQ29udGFpbmVyICYgYywgX1ByZWRpY2F0ZSBwKSB7CiAgICBhdXRvIG5ld19lbmQgPSBzdGQ6OnJlbW92ZV9pZihjLmJlZ2luKCksIGMuZW5kKCksIHApOwogICAgYy5lcmFzZShuZXdfZW5kLCBjLmVuZCgpKTsgICAgCn0KCmludCBtYWluKCkgewogICAgewogICAgaW50IHZhbHVlID0gMzsKICAgIHN0ZDo6dmVjdG9yPGludD4gdiA9IHsxLCAyLCAzLCA0LCA1fTsKICAgIHByaW50X3ZlYygiQmVmb3JlIDoiLCB2KTsKICAgIGF1dG8gbmV3X2VuZCA9IHN0ZDo6cmVtb3ZlX2lmKHYuYmVnaW4oKSwgdi5lbmQoKSwgW3ZhbHVlXSAoaW50IHgpIHsgcmV0dXJuIHggPCB2YWx1ZTsgfSk7CiAgICBwcmludF92ZWMoIkFmdGVyIHJlbW92ZV9pZiA6Iiwgdik7CiAgICB2LmVyYXNlKG5ld19lbmQsIHYuZW5kKCkpOwogICAgcHJpbnRfdmVjKCJBZnRlciBlcmFzZToiLCB2KTsKICAgIH0KCiAgICB7CiAgICBpbnQgdmFsdWUgPSAyOwogICAgc3RkOjp2ZWN0b3I8aW50PiB2ID0gezEsIDIsIDMsIDQsIDV9OwogICAgcHJpbnRfdmVjKCJCZWZvcmUgOiIsIHYpOwogICAgcmVtb3ZlX2lmX2FuZF9yZXNpemUodiwgW3ZhbHVlXSAoaW50IHgpIHsgcmV0dXJuIHggPiB2YWx1ZTsgfSk7CiAgICBwcmludF92ZWMoIkFmdGVyIHJlbW92ZV9pZl9hbmRfcmVzaXplIDoiLCB2KTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==