#include <iostream>
#include <vector>
#include <map>
namespace extract
{
template <typename T1, typename T2>
const T2& e(const std::pair<T1, T2>& r)
{
return r.second;
}
template <typename T>
const T& e(const T& r)
{
return r;
}
template <typename IT>
auto e_it(IT&& it) -> decltype (e(*it))
{
return e(*it);
}
}
template<typename Iterator>
void print(Iterator begin, Iterator end)
{
while (begin != end)
{
std::cout << extract::e_it(begin) << std::endl;
++begin;
}
}
int main()
{
std::vector<int> v(3, 1);
std::map<int, int> m = {{0, 10}, {1, 11}, {2, 12}};
print(v.begin(), v.end());
print(m.begin(), m.end());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgoKbmFtZXNwYWNlIGV4dHJhY3QKewogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KICAgIGNvbnN0IFQyJiBlKGNvbnN0IHN0ZDo6cGFpcjxUMSwgVDI+JiByKQogICAgewogICAgICAgIHJldHVybiByLnNlY29uZDsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIGNvbnN0IFQmIGUoY29uc3QgVCYgcikKICAgIHsKICAgICAgICByZXR1cm4gcjsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSVQ+CiAgICBhdXRvIGVfaXQoSVQmJiBpdCkgLT4gZGVjbHR5cGUgKGUoKml0KSkKICAgIHsKICAgICAgICByZXR1cm4gZSgqaXQpOwogICAgfQoKfQoKdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CnZvaWQgcHJpbnQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKewogICAgd2hpbGUgKGJlZ2luICE9IGVuZCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgZXh0cmFjdDo6ZV9pdChiZWdpbikgPDwgc3RkOjplbmRsOwogICAgICAgICsrYmVnaW47CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgc3RkOjp2ZWN0b3I8aW50PiB2KDMsIDEpOwogICAgc3RkOjptYXA8aW50LCBpbnQ+IG0gPSB7ezAsIDEwfSwgezEsIDExfSwgezIsIDEyfX07CgogICAgcHJpbnQodi5iZWdpbigpLCB2LmVuZCgpKTsKICAgIHByaW50KG0uYmVnaW4oKSwgbS5lbmQoKSk7CgogICAgcmV0dXJuIDA7Cn0K