C++ 函数模板print
简述#
在知乎看到文章leetcode 的奇怪 println vector 工具,于是手痒自己也写了一个print
函数。
因为工作中没有需要写这种代码的情况,所以好久没有写这种代码了,还是挺怀念以前学习编程的日子的,无忧无虑,每解决一个问题都很快乐。
下面代码没有使用引用传参进行优化。
代码#
#include <iostream> #include <vector> #include <list> #include <map> #include <string> #include <iterator> // 最基本实现 template<typename T> void print(T t) { std::cout<<t; } // 处理 std::pair template<typename Kt,typename Vt> void print(std::pair<Kt,Vt> kv) { print(kv.first); print(" = "); print(kv.second); } // 对 std::string 特殊处理 // 注释掉可以按照序列输出了 void print(std::string s) { std::cout<<s; } // 处理各种序列容器(vector/list/map ...) template<typename T,typename AllocT,template<typename,typename...> typename SequenceT> void print(SequenceT<T,AllocT> seq) { print("{ "); for(auto iter = std::begin(seq);iter != std::end(seq);iter = std::next(iter)) { print(*iter); print(","); } print("\b}"); } // 简单的测试一下 int main() { print(std::make_pair(102,"sadasd")); print('\n'); std::vector<std::vector<int> > vec{ {3,5,4}, {2,67}, {4,6}}; print(vec); std::list<float> l{1.2f,4.3f,6.1f,1.5f}; print(l); print('\n'); std::map<int,std::string> m{ {1,"one"}, {0,"zero"}, {2,"two"}, }; print(m); return 0; }
编译输出#
# 编译 clang++ test.cpp # 执行 ./a.out 102 = sadasd { { 3,5,4},{ 2,67},{ 4,6}}{ 1.2,4.3,6.1,1.5} { 0 = zero,1 = one,2 = two}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2018-11-28 Pilosa文档翻译(二)入门指南