debug

变量

void _debug(ostream& os) { os << '\n'; }
template<typename T, typename... Args> void _debug(ostream& os, const T& t, const Args&... args) {
    os << t;
    if (sizeof...(args)) {
        os << ", ";
    }
    _debug(os, args...);
}
#define debug(args...) cerr << #args << " = ", _debug(cout, ##args)

数组

template<typename T> void outArray(T a[], int l, int r) {
    cout << '[';
    for (int i = l; i <= r; ++i) {
        cout << a[i];
        if (i != r) {
            cout << ", ";
        }
    }
    cout << "]\n";
}

pair

template<typename A, typename B> ostream& operator <<(ostream& os, const pair<A, B>& M) {
    os << '<' << M.first << ", " << M.second << '>';
    return os;
}

vector

template<typename T> ostream& operator <<(ostream& os, const vector<T>& V) {
    os << '[';
    for (int i = 0; i < V.size(); ++i) {
        os << V[i];
        if (i + 1 != V.size()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}

map

template<typename A, typename B> ostream& operator <<(ostream& os, const map<A, B>& M) {
    os << '[';
    for (auto it = M.begin(); it != M.end(); ++it) {
        os << '(' << it -> first << ": " << it -> second << ')';
        if (++it != M.end()) {
            os << ", ";
        }
        --it;
    }
    os << ']';
    return os;
}

unordered_map

template<typename A, typename B> ostream& operator <<(ostream& os, const unordered_map<A, B>& M) {
    os << '[';
    for (auto it = M.begin(); it != M.end(); ++it) {
        os << '(' << it -> first << ": " << it -> second << ')';
        if (++it != M.end()) {
            os << ", ";
        }
        --it;
    }
    os << ']';
    return os;
}

set

template<typename T> ostream& operator <<(ostream& os, const set<T>& S) {
    os << '{';
    for (auto it = S.begin(); it != S.end(); ++it) {
        os << *it;
        if (++it != S.end()) {
            os << ", ";
        }
        --it;
    }
    os << '}';
    return os;
}

unordered_set

template<typename T> ostream& operator <<(ostream& os, const unordered_set<T>& S) {
    os << '{';
    for (auto it = S.begin(); it != S.end(); ++it) {
        os << *it;
        if (++it != S.end()) {
            os << ", ";
        }
        --it;
    }
    os << '}';
    return os;
}

multiset

template<typename T> ostream& operator <<(ostream& os, const multiset<T>& S) {
    os << '{';
    for (auto it = S.begin(); it != S.end(); ++it) {
        os << *it;
        if (++it != S.end()) {
            os << ", ";
        }
        --it;
    }
    os << '}';
    return os;
}

stack

template<typename T> ostream& operator <<(ostream& os, stack<T> S) {
    os << '[';
    while (!S.empty()) {
        os << S.top();
        S.pop();
        if (!S.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}

queue

template<typename T> ostream& operator <<(ostream& os, queue<T> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.front();
        Q.pop();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}

priority_queue

template<typename T> ostream& operator <<(ostream& os, priority_queue<T> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.top();
        Q.pop();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, priority_queue<T, vector<T>, greater<T>> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.top();
        Q.pop();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}

deque

template<typename T> ostream& operator <<(ostream& os, deque<T> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.front();
        Q.pop_front();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}

all

template<typename A, typename B> ostream& operator <<(ostream& os, const pair<A, B>& M) {
    os << '<' << M.first << ", " << M.second << '>';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, const vector<T>& V) {
    os << '[';
    for (int i = 0; i < V.size(); ++i) {
        os << V[i];
        if (i + 1 != V.size()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename A, typename B> ostream& operator <<(ostream& os, const map<A, B>& M) {
    os << '[';
    for (auto it = M.begin(); it != M.end(); ++it) {
        os << '(' << it -> first << ": " << it -> second << ')';
        if (++it != M.end()) {
            os << ", ";
        }
        --it;
    }
    os << ']';
    return os;
}
template<typename A, typename B> ostream& operator <<(ostream& os, const unordered_map<A, B>& M) {
    os << '[';
    for (auto it = M.begin(); it != M.end(); ++it) {
        os << '(' << it -> first << ": " << it -> second << ')';
        if (++it != M.end()) {
            os << ", ";
        }
        --it;
    }
    os << ']';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, const set<T>& S) {
    os << '{';
    for (auto it = S.begin(); it != S.end(); ++it) {
        os << *it;
        if (++it != S.end()) {
            os << ", ";
        }
        --it;
    }
    os << '}';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, const unordered_set<T>& S) {
    os << '{';
    for (auto it = S.begin(); it != S.end(); ++it) {
        os << *it;
        if (++it != S.end()) {
            os << ", ";
        }
        --it;
    }
    os << '}';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, const multiset<T>& S) {
    os << '{';
    for (auto it = S.begin(); it != S.end(); ++it) {
        os << *it;
        if (++it != S.end()) {
            os << ", ";
        }
        --it;
    }
    os << '}';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, stack<T>& S) {
    os << '[';
    while (!S.empty()) {
        os << S.top();
        S.pop();
        if (!S.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, queue<T> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.front();
        Q.pop();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, priority_queue<T> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.top();
        Q.pop();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, priority_queue<T, vector<T>, greater<T>> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.top();
        Q.pop();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename T> ostream& operator <<(ostream& os, deque<T> Q) {
    os << '[';
    while (!Q.empty()) {
        os << Q.front();
        Q.pop_front();
        if (!Q.empty()) {
            os << ", ";
        }
    }
    os << ']';
    return os;
}
template<typename T> void outArray(T a[], int l, int r) {
    cout << '[';
    for (int i = l; i <= r; ++i) {
        cout << a[i];
        if (i != r) {
            cout << ", ";
        }
    }
    cout << "]\n";
}
void _debug(ostream& os) { os << '\n'; }
template<typename T, typename... Args> void _debug(ostream& os, const T& t, const Args&... args) {
    os << t;
    if (sizeof...(args)) {
        os << ", ";
    }
    _debug(os, args...);
}
#define debug(args...) cerr << #args << " = ", _debug(cout, ##args)
posted @ 2021-08-17 17:02  stler  阅读(58)  评论(0)    收藏  举报