简述

在知乎看到文章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的更多相关文章

  1. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  2. c++函数模板---3

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 模板从大体上,可以分为两种:函数模板和类模板.函数模板是算法库的基础,类模板是建立标准库容器和迭代器的基 ...

  3. C++ 模板学习 函数模板、类模板、迭代器模板

    使用模板能够极大到使得代码可重用. 记录一下,方便后续使用. 1. 函数模板,支持多种类型参数 #include <stdio.h> #include <math.h> //函 ...

  4. C++解析(26):函数模板与类模板

    0.目录 1.函数模板 1.1 函数模板与泛型编程 1.2 多参数函数模板 1.3 函数重载遇上函数模板 2.类模板 2.1 类模板 2.2 多参数类模板与特化 2.3 特化的深度分析 3.小结 1. ...

  5. c++11变长参数函数模板

    By francis_hao    Mar 25,2018   一个最简单的实例大概是这个样子: #include <iostream>using namespace std; /*变长参 ...

  6. C++ 函数模板一(函数模板定义)

    //函数模板定义--数据类型做参数 #include<iostream> using namespace std; /* 函数模板声明 1.函数模板定义由模板说明和函数定义组成,并且一个模 ...

  7. hdu3501Calculation 2——欧拉函数模板

    题目: Problem Description Given a positive integer N, your task is to calculate the sum of the positiv ...

  8. Template 基础篇-函数模板(待看

    Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...

  9. 【C++】模板简述(二):函数模板

    我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1 ...

随机推荐

  1. springboot设置访问端口和项目路径

    找到,application.properties, 添加如下配置即可 server.port=8088server.servlet.context-path=/

  2. Httpd服务入门知识-https(http over ssl)安全配置

    Httpd服务入门知识-https(http over ssl)安全配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.SSL会话的简化过程 ()客户端发送可供选择的加密方式, ...

  3. Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息

    Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.httpd配置文件的组成 1>.主要组成 Globa ...

  4. virt-install创建虚拟机并制作成模板

    一.使用virt-install创建新的虚拟机 virt--template --ram --vcpu= --virt-type kvm --cdrom=/Data/kvm/iso/CentOS-.i ...

  5. linux lvm管理基础教程

    linux lvm管理基础教程 本人是在redhat7.x系统上亲测lvm管理功能,至于文中所受的CentOS 6 没有亲自试过. 本文来自:https://geekpeek.net/lvm-phys ...

  6. 为什么要指定HashMap的容量?HashMap指定容量初始化后,底层Hash数组已经被分配内存了吗?

    为什么要指定HashMap的容量? 首先创建HashMap时,指定容量比如1024后,并不是HashMap的size不是1024,而是0,插入多少元素,size就是多少: 然后如果不指定HashMap ...

  7. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  8. python列表各种切片姿势

    顺着切,反着切,想怎么切就怎么切,但是别被坑. mylist = [1,2,3,4,5,6,7,8,9] print(mylist[2:7:2]) # [3, 5, 7] print(mylist[: ...

  9. The Secret Life of Types in Swift

    At first glance, Swift looked different as a language compared to Objective-C because of the modern ...

  10. SPU、SKU、ARPU

    在涂涂商城开发之前,发现一篇关于电商中 SPU.SKU.ARPU 的介绍,转至博客,原文地址:http://www.ikent.me/blog/3017 什么是SPU.SKU.ARPU 首先,搞清楚商 ...