Untitled
unknown
c_cpp
14 days ago
1.2 kB
4
Indexable
#pragma region template #include <bits/stdc++.h> template <typename, typename = void> struct has_begin_end_t : std::false_type {}; template <typename T> struct has_begin_end_t<T, std::void_t< decltype(std::begin(std::declval<T&>())), decltype(std::end(std::declval<T&>())) >> : std::true_type {}; template <typename, typename = void> struct has_ostream_t : std::false_type {}; template <typename T> struct has_ostream_t<T, std::void_t< decltype(std::operator<<(std::declval<std::ostream&>(), std::declval<const T&>())) >> : std::true_type {}; template <typename T> constexpr bool is_container_v = has_begin_end_t<T>::value && !has_ostream_t<T>::value; template <typename T> typename std::enable_if<is_container_v<T>, std::istream&>::type operator>>(std::istream& is, T& c) { for (auto& x : c) is >> x; return is; } template <typename T> typename std::enable_if<is_container_v<T>, std::ostream&>::type operator<<(std::ostream& os, const T& c) { for (auto it = c.begin(); it != c.end(); it = std::next(it)) { if (it != c.begin()) os << ' '; os << *it; } return os; } #pragma endregion
Editor is loading...
Leave a Comment