読者です 読者をやめる 読者になる 読者になる

drilldripper’s blog

機械学習とソフトウェア開発を頑張ってます

競技プログラミングから輸入した普段使いでも便利なC++テンプレート

以下のテンプレートを記述すると、Vectorとpairの中身をcoutで表示できるようになります。

#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
template <typename T>
std::ostream &operator<<(std::ostream &out, const std::vector<T> &v) {
if (!v.empty()) {
    out << '[';
    std::copy(v.begin(), v.end(), std::ostream_iterator<T>(out, ", "));
    out << "\b\b]";
  }
  return out;
}
template <typename T1, typename T2>
std::ostream &operator<<(std::ostream &out, const std::pair<T1, T2> &p) {
    out << "[" << p.first << ", " << p.second << "]";
    return out;
}

入力ストリーム << をオーバーロードしてVectorとpairを表示できるようにしています。使用例を以下に示します。

int main(){
    std::pair<int, int> pData(2, 3);
    std::vector<int> vData(5);
    vData[0] = 3;
    vData[1] = 5;
    vData[2] = 7;
    vData[3] = 11;
    vData[4] = 2;
    std::cout << "--Show Vector--" << std::endl;
    std::cout << vData << std::endl;
    std::cout << "--Show Pair--" << std::endl;
    std::cout << pData << std::endl;
    return 0;

}

output

--Show Vector--
[3, 5, 7, 11, 2]
--Show Pair--
[2, 3]

競技プログラミングをやっているとたまに見かけます。

結構便利でPythonでリストをprint()で表示するような感覚でC++の出力を扱えるので、printfデバッグが捗ります。

こんなことをしているから、いつまでたってもデバッガを使いこなせないのかもしれない…。