#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
bool bp (int left, int right) { return ( left + right == 2); }
template<class ForwardIt, class BinaryPredicate>
ForwardIt removeif(ForwardIt first, ForwardIt last, BinaryPredicate p) {
ForwardIt result = first;
while ( first != last - 1) {
if ( !p( *first, *( first + 1))) {
*result = *first;
++result;
}
if( first == last - 1) return result;
++first;
}
return result;
}
/*
*
*/
int main(int argc, char** argv) {
int a[] = { 0, 2, 1, 3, 0, 2, 3, 2, 0, 3, 8};
std::vector<int> v( a, a + 11);
std::copy( v.begin(), v.end(), std::ostream_iterator<int>( std::cout, ","));
std::cout << std::endl;
std::vector<int>::iterator it = removeif( v.begin(), v.end(), bp);
std::copy( v.begin(), v.end(), std::ostream_iterator<int>( std::cout, ","));
v.erase( it, v.end()); std::cout << std::endl;
std::copy( v.begin(), v.end(), std::ostream_iterator<int>( std::cout, ","));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgpib29sIGJwIChpbnQgbGVmdCwgaW50IHJpZ2h0KSB7IHJldHVybiAoIGxlZnQgKyByaWdodCA9PSAyKTsgfQoKdGVtcGxhdGU8Y2xhc3MgRm9yd2FyZEl0LCBjbGFzcyBCaW5hcnlQcmVkaWNhdGU+CkZvcndhcmRJdCByZW1vdmVpZihGb3J3YXJkSXQgZmlyc3QsIEZvcndhcmRJdCBsYXN0LCBCaW5hcnlQcmVkaWNhdGUgcCkgewoKICAgIEZvcndhcmRJdCByZXN1bHQgPSBmaXJzdDsKICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCAtIDEpIHsKICAgICAgICBpZiAoICFwKCAqZmlyc3QsICooIGZpcnN0ICsgMSkpKSB7CiAgICAgICAgICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgICAgICAgICAgICsrcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiggZmlyc3QgPT0gbGFzdCAtIDEpIHJldHVybiByZXN1bHQ7CiAgICAgICAgKytmaXJzdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCi8qCiAqIAogKi8KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CgogICAgaW50IGFbXSA9IHsgMCwgMiwgMSwgMywgMCwgMiwgMywgMiwgMCwgMywgOH07CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYoIGEsIGEgKyAxMSk7CiAgICBzdGQ6OmNvcHkoIHYuYmVnaW4oKSwgdi5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4oIHN0ZDo6Y291dCwgIiwiKSk7CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgc3RkOjp2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQgPSByZW1vdmVpZiggdi5iZWdpbigpLCB2LmVuZCgpLCBicCk7CiAgICBzdGQ6OmNvcHkoIHYuYmVnaW4oKSwgdi5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4oIHN0ZDo6Y291dCwgIiwiKSk7CiAgICB2LmVyYXNlKCBpdCwgdi5lbmQoKSk7IHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvcHkoIHYuYmVnaW4oKSwgdi5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4oIHN0ZDo6Y291dCwgIiwiKSk7CiAgICByZXR1cm4gMDsKfQ==
0,2,1,3,0,2,3,2,0,3,8,
2,1,3,2,3,0,3,2,0,3,8,
2,1,3,2,3,0,3,