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}
C++ 函数模板print的更多相关文章
- [Reprint] C++函数模板与类模板实例解析
这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
- c++函数模板---3
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 模板从大体上,可以分为两种:函数模板和类模板.函数模板是算法库的基础,类模板是建立标准库容器和迭代器的基 ...
- C++ 模板学习 函数模板、类模板、迭代器模板
使用模板能够极大到使得代码可重用. 记录一下,方便后续使用. 1. 函数模板,支持多种类型参数 #include <stdio.h> #include <math.h> //函 ...
- C++解析(26):函数模板与类模板
0.目录 1.函数模板 1.1 函数模板与泛型编程 1.2 多参数函数模板 1.3 函数重载遇上函数模板 2.类模板 2.1 类模板 2.2 多参数类模板与特化 2.3 特化的深度分析 3.小结 1. ...
- c++11变长参数函数模板
By francis_hao Mar 25,2018 一个最简单的实例大概是这个样子: #include <iostream>using namespace std; /*变长参 ...
- C++ 函数模板一(函数模板定义)
//函数模板定义--数据类型做参数 #include<iostream> using namespace std; /* 函数模板声明 1.函数模板定义由模板说明和函数定义组成,并且一个模 ...
- hdu3501Calculation 2——欧拉函数模板
题目: Problem Description Given a positive integer N, your task is to calculate the sum of the positiv ...
- Template 基础篇-函数模板(待看
Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...
- 【C++】模板简述(二):函数模板
我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1 ...
随机推荐
- window界面自动化
一.windows带界面的自动化1.AutoIt AutoIt3官方下载地址:https://www.autoitscript.com/files/autoit3/autoit-v3-setup.ex ...
- php日期格式化方法详解
php日期格式化一般使用date()来完成,此函数的声明及定义如下图所示,其参数有很多,这里按常用的年.月.日.时.分.秒.星期来简单介绍. date(format,timestamp) 一.年.月. ...
- php+js实现极验,拖动滑块验证码验证表单
现在很多网站,比如淘宝,京东等都改用使用极验拖动验证码实现登录,这种方式比传统的验证码方式有更好的体验,减少用户输入的错误,也同样能起到防盗刷的功能.现在很多极验都是第三方的,也很多都是收费的.今天在 ...
- CC2530调试过程中遇到的问题们
应用场景描述: 多个发送端在不同的信道上发送信息(11~26)信道,接收端轮询所有信道(11~26),若有信号,则接收,若无信号则继续轮询.形成多个点对点的收发系统. 一.问题1 Ø 问题现象描述: ...
- python语言的堆栈与队列类的实现
基于python语言的数据结构之堆栈与队列的实现 # 堆栈的实现 # -*- coding: utf-8 -*- """ 栈(stack), 是一种容器,可以存入数据元素 ...
- Httpd服务进阶知识-调用操作系统的Sendfile机制
Httpd服务进阶知识-调用操作系统的Sendfile机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.不用 sendfile 的传统网络传输过程 read(file, tm ...
- centos设置开机自启动脚本
1.新建脚本文件 我这里是为了设置开机自动设置ipv6隧道,所以命名为ipv6tunnel.sh ifconfig sit0 up ifconfig sit0 inet6 tunnel ::66.22 ...
- 201671010438王奕晗实验十四 团队项目评审&课程学习总结
个人学习总结博客 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 作业学习目标 完成个人软件心得总结 一.结合本学期课程学习内容,对比<实验一 软件工 ...
- linux查看大文件
du -h --max-depth=1
- 使用openrc 管理容器中的服务
对于后台任务一般是不建议在容器中运行的,但是如果我们为了简化应用的部署,可能会使用后台任务进行服务的管理,类似的 工具很多,supervisor,systemd , init.d 同时对于docker ...