最后更新:2026-10-13
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())判断"是不是可迭代",是就走元素级输出,不是就走原来的输出流。感兴趣的建议直接读源码,不到两百行,是学习表达式检测惯用法的好材料。
调试时打印容器是刚需,这个小工具能省掉无数手写 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++那些事