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

template<typename Iter>
void shuffle_range(Iter begin, Iter end)
{
    static std::random_device rd;
    std::default_random_engine rng(rd());
    std::shuffle(begin, end, rng);
}

int main()
{
    std::vector<int> data;
    data.reserve(20);
    std::generate_n(std::back_inserter(data), data.capacity(),
                    []{ static int i=0; return ++i;});
    
    std::copy(data.begin(), data.end(),
              std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    shuffle_range(data.begin(), data.end());
    
    std::copy(data.begin(), data.end(),
              std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    return 0;
}
