zoukankan      html  css  js  c++  java
  • 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("}");
    }
    
    // 简单的测试一下
    int main()
    {
        print(std::make_pair(102,"sadasd"));
        print('
    ');
        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('
    ');
        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}
    
  • 相关阅读:
    以管理员权限运行程序?
    vb6 判断64位操作系统
    vb6动态创建webbrowser
    vb6中webbrowser控件树转换备忘
    vb6异步ADO操作
    sql compact 使用EF无法更新的问题?
    本地vbs调试快速显示输出
    c# 加密转载 备忘
    vb.net 动态调用api
    SharePoint List 查看器
  • 原文地址:https://www.cnblogs.com/oloroso/p/11949445.html
Copyright © 2011-2022 走看看