#include <iostream>
#include <array>
#include <algorithm>
#include <iterator>
#include <random>
static constexpr size_t razmer = 12;
template<class T, size_t N>
struct massiv_wrapper
{
T data[N];
};
template<class T, size_t N, class... Ts>
struct massiv_guard
{
using massiv_type = T[N];
massiv_guard(Ts&& ...args): m_ukazatel{new massiv_wrapper<T, N>(std::forward<Ts>(args)...)} {}
~massiv_guard() { delete m_ukazatel; }
massiv_type& get() { return m_ukazatel->data; }
private:
massiv_wrapper<T, N>* m_ukazatel;
};
template<size_t N, class T>
std::ostream& operator<< (std::ostream& os, T const (&arr)[N])
{
std::copy(std::begin(arr), std::end(arr), std::ostream_iterator<T>(os, " "));
return os << std::endl;
}
template<size_t N, class T, class Fn>
void foreach_pair(T (&arr)[N], Fn&& f)
{
(void)std::adjacent_find(std::begin(arr), std::end(arr), std::forward<Fn>(f));
}
int main()
{
auto guard = massiv_guard<int, razmer>();
int (&mas)[razmer] = guard.get();
std::random_device rd;
std::default_random_engine e1(rd());
std::uniform_int_distribution<int> uniform_dist(0, 19);
std::generate(std::begin(mas), std::end(mas), [&uniform_dist, &e1]() {
return uniform_dist(e1);
});
std::cout << mas;
auto swap = [_=0](auto& a, auto& b) mutable {
if (++_%2) { std::swap(a, b); }
return false;
};
foreach_pair(mas, swap);
std::cout << mas;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPHJhbmRvbT4KCnN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJhem1lciA9IDEyOwoKdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IE4+CnN0cnVjdCBtYXNzaXZfd3JhcHBlcgp7CglUIGRhdGFbTl07Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3QgTiwgY2xhc3MuLi4gVHM+CnN0cnVjdCBtYXNzaXZfZ3VhcmQKewoJdXNpbmcgbWFzc2l2X3R5cGUgPSBUW05dOwoJCgltYXNzaXZfZ3VhcmQoVHMmJiAuLi5hcmdzKTogbV91a2F6YXRlbHtuZXcgbWFzc2l2X3dyYXBwZXI8VCwgTj4oc3RkOjpmb3J3YXJkPFRzPihhcmdzKS4uLil9IHt9Cgl+bWFzc2l2X2d1YXJkKCkgeyBkZWxldGUgbV91a2F6YXRlbDsgfQoJCgltYXNzaXZfdHlwZSYgZ2V0KCkgeyByZXR1cm4gbV91a2F6YXRlbC0+ZGF0YTsgfQoKcHJpdmF0ZToKCW1hc3Npdl93cmFwcGVyPFQsIE4+KiBtX3VrYXphdGVsOwp9OwoKdGVtcGxhdGU8c2l6ZV90IE4sIGNsYXNzIFQ+CnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCAoc3RkOjpvc3RyZWFtJiBvcywgVCBjb25zdCAoJmFycilbTl0pCnsKCXN0ZDo6Y29weShzdGQ6OmJlZ2luKGFyciksIHN0ZDo6ZW5kKGFyciksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxUPihvcywgIiAiKSk7CglyZXR1cm4gb3MgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTiwgY2xhc3MgVCwgY2xhc3MgRm4+CnZvaWQgZm9yZWFjaF9wYWlyKFQgKCZhcnIpW05dLCBGbiYmIGYpCnsKCSh2b2lkKXN0ZDo6YWRqYWNlbnRfZmluZChzdGQ6OmJlZ2luKGFyciksIHN0ZDo6ZW5kKGFyciksIHN0ZDo6Zm9yd2FyZDxGbj4oZikpOwp9CgppbnQgbWFpbigpCnsKCWF1dG8gZ3VhcmQgPSBtYXNzaXZfZ3VhcmQ8aW50LCByYXptZXI+KCk7CglpbnQgKCZtYXMpW3Jhem1lcl0gPSBndWFyZC5nZXQoKTsKCQoJc3RkOjpyYW5kb21fZGV2aWNlIHJkOwoJc3RkOjpkZWZhdWx0X3JhbmRvbV9lbmdpbmUgZTEocmQoKSk7CiAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IHVuaWZvcm1fZGlzdCgwLCAxOSk7CiAgICBzdGQ6OmdlbmVyYXRlKHN0ZDo6YmVnaW4obWFzKSwgc3RkOjplbmQobWFzKSwgWyZ1bmlmb3JtX2Rpc3QsICZlMV0oKSB7CiAgICAJcmV0dXJuIHVuaWZvcm1fZGlzdChlMSk7CiAgICB9KTsKICAgIAoJc3RkOjpjb3V0IDw8IG1hczsKCQoJYXV0byBzd2FwID0gW189MF0oYXV0byYgYSwgYXV0byYgYikgbXV0YWJsZSB7CgkJaWYgKCsrXyUyKSB7IHN0ZDo6c3dhcChhLCBiKTsgfQoJCXJldHVybiBmYWxzZTsKCX07Cglmb3JlYWNoX3BhaXIobWFzLCBzd2FwKTsKCQoJc3RkOjpjb3V0IDw8IG1hczsKfQ==