最終更新:2026-10-12
C++ STL コンテナの手軽な出力¶
呉先生のコードに手を加えました——ここをクリックしてコードへ直接アクセス
入力:
出力結果は次のとおりです:
¶
導入方法¶
output_container.h をプロジェクトにダウンロードしてインクルードするだけです:
#include "output_container.h"
int main() {
std::vector<int> vec{1, 2, 3, 4, 5};
std::set<std::string> names{"light", "city"};
std::cout << vec << std::endl; // { 1, 2, 3, 4, 5 }
std::cout << names << std::endl; // { city, light }
return 0;
}
対応コンテナ¶
vector、list、set、map、multiset、multimap、unordered 系、pair、さらに begin/end を実装していれば任意の反復可能なカスタム型にも対応し、ネストしたコンテナもそのまま出力できます。
原理を一言で¶
要はコンテナに対して operator<< を特殊化すること:SFINAE(void_t で begin()/end() を検出)で「反復可能かどうか」を判断し、可能なら要素ごとに出力し、不可能なら元の出力ストリームに流します。興味があればぜひソースを直接読んでください。200 行弱で、式検出イディオムを学ぶ良い教材です。
デバッグ時のコンテナ出力は必需品で、この小道具は手書き for ループを無数に省いてくれます。質問があればコメント欄でどうぞ〜
関連トピック¶
- Bazel で C++ プロジェクトをビルド | C++那些事
- Bazel と LLDB の連携デバッグ | C++那些事
- CMake 入門と実践 | C++那些事
- Conan C++ パッケージ管理入門 | C++那些事
- C++ Insights によるコンパイル期観察 | C++那些事
- C++ Jupyter Notebook インタラクティブ | C++那些事
- C++ string から int への変換 | C++那些事
- C++ dbg-macro デバッグマクロ | C++那些事
- GCC コンパイルオプション詳解 | C++那些事
- GDB で C++ プログラムをデバッグ | C++那些事