跳转至

最后更新:2026-10-13

C++ STL 容器快捷输出

对吴老师的代码进行了修改,点击此处直通代码

输入:

map<int, int> mp{
            {1, 1},
            {2, 4},
            {3, 9}};
    cout << mp << endl;

输出结果显示:

{ 1 => 1, 2 => 4, 3 => 9 }

怎么接入

把 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 循环。有问题欢迎留言区交流~

相关主题

评论