#include <iostream>
#include <algorithm>
#include <iterator>

template <typename iter_type>
void print(iter_type beg, iter_type end)
{
    std::cout << *beg;

    while (++beg != end)
        std::cout << ' ' << *beg;

    std::cout << '\n';
}


int main()
{
    int num[] = { 4, -2, -8, 1, 7, 9, -23, -6, 56, 23 };

    std::cout << "before partition\n\t";
    print(std::begin(num), std::end(num));

    auto p = std::partition(std::begin(num), std::end(num), [](int n) {return n < 0; });

    std::cout << "\nafter partition\n\t";
    print(std::begin(num), std::end(num));

    std::cout << "\nnegative numbers (" << p - std::begin(num) << ")\n\t";
    print(std::begin(num), p);

    std::cout << "\npositive numbers (" << std::end(num) - p << ")\n\t";
    print(p, std::end(num));

}