Advertisement
aayyk

Untitled

Apr 24th, 2022
935
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define debug(x...) std::cout << #x << " = "; _print(x); std::cout << endl;
  4.  
  5. void _print() {}
  6. template <typename T, typename... V>
  7. void _print(T t, V... v) {
  8.     std::cout << t;
  9.     if (sizeof...(v)) {
  10.         std::cout << ", ";
  11.     }
  12.     _print(v...);
  13. }
  14.  
  15. template <typename Ostream, typename T>
  16. Ostream& operator<<(Ostream& os, std::queue <T> q) {
  17.     std::vector <T> v;
  18.     while (!q.empty()) {
  19.         v.push_back(q.front());
  20.         q.pop();
  21.     }
  22.     os << v;
  23.     return os;
  24. }
  25.  
  26. template <typename Ostream, typename T>
  27. Ostream& operator<<(Ostream& os, std::deque <T> q) {
  28.     std::vector <T> v;
  29.     while (!q.empty()) {
  30.         v.push_back(q.front());
  31.         q.pop_front();
  32.     }
  33.     os << v;
  34.     return os;
  35. }
  36.  
  37. template<typename Ostream, typename Cont>
  38. typename std::enable_if <std::is_same <Ostream, std::ostream>::value, Ostream&>::type
  39. operator<<(Ostream& os, const Cont& v){
  40.     os << "[";
  41.     bool first = true;
  42.    
  43.     for (auto x : v) {
  44.         if (!first) {
  45.             os << ", ";
  46.         }
  47.         os << x;
  48.         first = false;
  49.     }
  50.    
  51.     return os << "]";
  52.  
  53. }
  54.  
  55.  
  56. template<typename Ostream, typename ...Ts>
  57. Ostream& operator<<(Ostream& os, const std::pair<Ts...>& p){
  58.     return os << "{" << p.first << ", " << p.second << "}";
  59. }
  60.  
  61. namespace aux {
  62.     template <std::size_t...> struct seq{};
  63.  
  64.     template <std::size_t N, std::size_t... Is>
  65.     struct gen_seq : gen_seq<N-1, N-1, Is...> {};
  66.  
  67.     template <std::size_t... Is>
  68.     struct gen_seq<0, Is...> : seq<Is...> {};
  69.  
  70.     template <class Ch, class Tr, class Tuple, std::size_t... Is>
  71.     void print_tuple(std::basic_ostream<Ch,Tr>& os, Tuple const& t, seq<Is...>){
  72.         using swallow = int[];
  73.         (void)swallow {0, (void(os << (Is == 0 ?  "" : ", ") << std::get<Is>(t)), 0)...};
  74.     }
  75. }
  76.  
  77. template<class Ch, class Tr, class... Args>
  78. auto operator<<(std::basic_ostream<Ch, Tr>& os, std::tuple<Args...> const& t) -> std::basic_ostream<Ch, Tr>& {
  79.     os << "(";
  80.     aux::print_tuple(os, t, aux::gen_seq<sizeof...(Args)>());
  81.     return os << ")";
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement