#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
const auto is_odd = []( int i ) { return i%2 == 1 ; };
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
for( int v : a ) std::cout << v << ' ' ;
std::cout << '\n' ;
auto mid = std::partition( std::begin(a), std::end(a), is_odd ) ;
for( auto iter = std::begin(a) ; iter != mid ; ++iter )
std::cout << *iter << ' ' ;
std::cout << " <partition> " ;
for( auto iter = mid ; iter != std::end(a) ; ++iter )
std::cout << *iter << ' ' ;
std::cout << "\n\n" ;
// 0 1 2 3 4 5 6 7 8 9
// 9 1 7 3 5 <partition> 4 6 2 8 0
}
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
for( int v : a ) std::cout << v << ' ' ;
std::cout << '\n' ;
auto mid = std::stable_partition( std::begin(a), std::end(a), is_odd ) ;
for( auto iter = std::begin(a) ; iter != mid ; ++iter )
std::cout << *iter << ' ' ;
std::cout << " <stable_partition> " ;
for( auto iter = mid ; iter != std::end(a) ; ++iter )
std::cout << *iter << ' ' ;
std::cout << "\n\n" ;
// 0 1 2 3 4 5 6 7 8 9
// 1 3 5 7 9 <stable_partition> 0 2 4 6 8
}
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
for( int v : a ) std::cout << v << ' ' ;
std::cout << '\n' ;
auto mid = std::remove_if( std::begin(a), std::end(a), is_odd ) ;
for( auto iter = std::begin(a) ; iter != mid ; ++iter )
std::cout << *iter << ' ' ;
std::cout << " <remove_if> " ;
for( auto iter = mid ; iter != std::end(a) ; ++iter )
std::cout << *iter << ' ' ;
std::cout << "\n\n" ;
// 0 1 2 3 4 5 6 7 8 9
// 0 2 4 6 8 <remove_if> 5 6 7 8 9
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgppbnQgbWFpbigpCnsKICAgIGNvbnN0IGF1dG8gaXNfb2RkID0gW10oIGludCBpICkgeyByZXR1cm4gaSUyID09IDEgOyB9OwoKICAgIHsKICAgICAgICBpbnQgYVtdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0gOwogICAgICAgIGZvciggaW50IHYgOiBhICkgc3RkOjpjb3V0IDw8IHYgPDwgJyAnIDsKICAgICAgICBzdGQ6OmNvdXQgPDwgJ1xuJyA7CgogICAgICAgIGF1dG8gbWlkID0gc3RkOjpwYXJ0aXRpb24oIHN0ZDo6YmVnaW4oYSksIHN0ZDo6ZW5kKGEpLCBpc19vZGQgKSA7CiAgICAgICAgZm9yKCBhdXRvIGl0ZXIgPSBzdGQ6OmJlZ2luKGEpIDsgaXRlciAhPSBtaWQgOyArK2l0ZXIgKQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgKml0ZXIgPDwgJyAnIDsKICAgICAgICBzdGQ6OmNvdXQgPDwgIiA8cGFydGl0aW9uPiAiIDsKICAgICAgICBmb3IoIGF1dG8gaXRlciA9IG1pZCA7IGl0ZXIgIT0gc3RkOjplbmQoYSkgOyArK2l0ZXIgKQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgKml0ZXIgPDwgJyAnIDsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlxuXG4iIDsKCiAgICAgICAgLy8gMCAxIDIgMyA0IDUgNiA3IDggOQogICAgICAgIC8vIDkgMSA3IDMgNSAgPHBhcnRpdGlvbj4gNCA2IDIgOCAwCiAgICB9CgogICAgewogICAgICAgIGludCBhW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfSA7CiAgICAgICAgZm9yKCBpbnQgdiA6IGEgKSBzdGQ6OmNvdXQgPDwgdiA8PCAnICcgOwogICAgICAgIHN0ZDo6Y291dCA8PCAnXG4nIDsKCiAgICAgICAgYXV0byBtaWQgPSBzdGQ6OnN0YWJsZV9wYXJ0aXRpb24oIHN0ZDo6YmVnaW4oYSksIHN0ZDo6ZW5kKGEpLCBpc19vZGQgKSA7CiAgICAgICAgZm9yKCBhdXRvIGl0ZXIgPSBzdGQ6OmJlZ2luKGEpIDsgaXRlciAhPSBtaWQgOyArK2l0ZXIgKQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgKml0ZXIgPDwgJyAnIDsKICAgICAgICBzdGQ6OmNvdXQgPDwgIiA8c3RhYmxlX3BhcnRpdGlvbj4gIiA7CiAgICAgICAgZm9yKCBhdXRvIGl0ZXIgPSBtaWQgOyBpdGVyICE9IHN0ZDo6ZW5kKGEpIDsgKytpdGVyICkKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICppdGVyIDw8ICcgJyA7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJcblxuIiA7CgogICAgICAgIC8vIDAgMSAyIDMgNCA1IDYgNyA4IDkKICAgICAgICAvLyAxIDMgNSA3IDkgIDxzdGFibGVfcGFydGl0aW9uPiAwIDIgNCA2IDgKICAgIH0KCiAgICB7CiAgICAgICAgaW50IGFbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSB9IDsKICAgICAgICBmb3IoIGludCB2IDogYSApIHN0ZDo6Y291dCA8PCB2IDw8ICcgJyA7CiAgICAgICAgc3RkOjpjb3V0IDw8ICdcbicgOwoKICAgICAgICBhdXRvIG1pZCA9IHN0ZDo6cmVtb3ZlX2lmKCBzdGQ6OmJlZ2luKGEpLCBzdGQ6OmVuZChhKSwgaXNfb2RkICkgOwogICAgICAgIGZvciggYXV0byBpdGVyID0gc3RkOjpiZWdpbihhKSA7IGl0ZXIgIT0gbWlkIDsgKytpdGVyICkKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICppdGVyIDw8ICcgJyA7CiAgICAgICAgc3RkOjpjb3V0IDw8ICIgPHJlbW92ZV9pZj4gIiA7CiAgICAgICAgZm9yKCBhdXRvIGl0ZXIgPSBtaWQgOyBpdGVyICE9IHN0ZDo6ZW5kKGEpIDsgKytpdGVyICkKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICppdGVyIDw8ICcgJyA7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJcblxuIiA7CgogICAgICAgIC8vIDAgMSAyIDMgNCA1IDYgNyA4IDkKICAgICAgICAvLyAwIDIgNCA2IDggIDxyZW1vdmVfaWY+IDUgNiA3IDggOQogICAgfQp9Cg==