/*模版成员模版*/
#include<iostream>
using namespace std;
template<typename V>
class Value
{public:Value(const V& v):m_v(v){}V m_v;
};
template<typename K>
class Key
{
public:Key(const K& k):m_k(k){}K m_k;template<typename V>class Value{public:Value(const V& v):m_v(v){}V m_v;};};
int main()
{Key<string> key("pi");Key<string>::Value<double> value(3.1415);cout<<key.m_k<<"  "<<value.m_v<<endl;return 0;
}

/*
 模版型成员变量
 */
#include<iostream>
using namespace std;
template<typename V>
class Value
{
    public:
        Value(const V& v):m_v(v){}
        V m_v;
};
template<typename K,typename V>
class Pair
{
public:
    Pair(const K& k,const V& v):m_k(k),m_v(v){}
    K m_k;
    Value<V> m_v;
};
int main()
{
    Pair<string,double> pair("PI",3.14);
    cout<<pair.m_v.m_v<<"  "<<pair.m_k<<endl;
    return 0;
}

#include<iostream>
#include<cstring>
using namespace std;
//模板函数
template<typename T>
T max(T x,T y)
{return x>y?x:y;
}
//函数特化
template<>
const char* max(const char * x,const char * y)
{return strcmp(x,y)>0?x:y;
}
//通用模版类
template<typename T>
class Comp
{
public:Comp(T x,T y):m_x(x),m_y(y){}T min()const{return m_x<m_y?m_x:m_y;}T max() const{return m_x>m_y?m_x:m_y;}
private:T m_x;T m_y;
};
/*
//全类特化某种类型
template<>
class Comp<const char*>
{
public:Comp(const char* x,const char * y):m_x(x),m_y(y){}const char* min() const{return strcmp(m_x,m_y)<0?m_x:m_y;}const char * max() const{return strcmp(m_x,m_y)>0?m_x:m_y;}
private:const char* m_x;const char * m_y;
};
*/
//只特化成员函数
template<>
const char* Comp<const char *>::min() const
{return strcmp(m_x,m_y)<0?m_x:m_y;
}
//只特化成员函数
template<>
const char * Comp<const char *>::max() const
{return strcmp(m_x,m_y)>0?m_x:m_y;
}int main()
{cout<<::max<int>(45,33)<<endl;cout<<::max<string>("hello","world")<<endl;Comp<int> c1(34,20);cout<<c1.min()<<endl;Comp<const char *> c2("good","abc");cout<<c2.min()<<endl;return 0;
}
/*模版实现输出流控制*/
#include<iostream>
#include<sstream>
using namespace std;
template<typename T>
class omanip
{
public:omanip(ostream&(*fun)(ostream&,T),T arg):m_fun(fun),m_arg(arg){}friend ostream& operator<<(ostream& os,const omanip<T>& om){return om.m_fun(os,om.m_arg);}
private:ostream& (*m_fun)(ostream&,T);T m_arg;
};
class color
{public:color(int ctrl,int bg,int fg):m_ctrl(ctrl),m_bg(bg),m_fg(fg){}int m_ctrl;int m_bg;int m_fg;
};
ostream& colorfun(ostream& os,color args)
{if(args.m_ctrl==-1) return os<<"\033[0m";ostringstream oss;oss<<"\033["<<args.m_ctrl<<";"<<args.m_bg<<";"<<args.m_fg<<"m";return os<<oss.str();
}omanip<color> colorfun1(int ctrl=-1,int bg=-1,int fg=-1)
{return omanip<color>(colorfun,color(ctrl,bg,fg));
}
int main()
{cout<<colorfun1(1,44,33)<<"test color!"<<endl;cout<<colorfun1(-1,44,33)<<"test color!"<<endl;return 0;
}
#include<iostream>
using namespace std;
//智能指针模版类
template<typename T>
class smartptr
{
public:explicit smartptr(T* p=NULL):m_p(p){}smartptr(smartptr<T>& that):m_p(that.release()){}smartptr& operator=(smartptr<T> & that){if(&that!=this){reset(that.release());return *this;}}T& operator*() const{return *m_p;}T* operator->() const{return &**this;}~smartptr(){if(m_p){delete m_p;m_p=NULL;}}
private:T* release(){T* p=m_p;m_p=NULL;return p;}void reset(T* p){if(p!=m_p){delete m_p;m_p=p;}}T* m_p;
};
//智能指错模版类,针对数组的特化
template<typename T>
class smartptr<T[]>
{
public:explicit smartptr(T* p=NULL):m_p(p){}smartptr(smartptr<T>& that):m_p(that.release()){}smartptr& operator=(smartptr<T> & that){if(&that!=this){reset(that.release());return *this;}}T& operator*() const{return *m_p;}T* operator->() const{return &**this;}~smartptr(){if(m_p){delete[] m_p;m_p=NULL;}}
private:T* release(){T* p=m_p;m_p=NULL;return p;}void reset(T* p){if(p!=m_p){delete[] m_p;m_p=p;}}T* m_p;
};
class stu
{
public:stu(int id=0,const char * name=""):id(id),name(name){cout<<"stu()\n";}~stu(){cout<<"~stu()\n";}void who() const{cout<<"id:"<<id<<",name:"<<name<<endl;}
private:string name;int id;
};
int main()
{smartptr<stu> ps(new stu(1,"zhansan"));ps->who();smartptr<stu[]> pss(new stu[5]);return 0;
}

linux中stl模版的用法1相关推荐

  1. linux下的zz命令,linux中cut命令的用法

    本文主要记录一下Linux中cut命令的用法. 1. cut命令使用说明 Usage: cut OPTION... [FILE]... cut命令用于选出FILE文件中每一行的某些部分,然后打印到标准 ...

  2. linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档

    第 第 PAGE 1 页 共 NUMPAGES 1 页 linux中的ftp命令用法 Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由小编为大家整理了linux中的ftp命令用法 ...

  3. Linux中read命令的用法

    1. 简单读取 read命令接收标准输入(键盘)的输入或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中.下面是 read命令的最简单形式: bixiaopeng@bixiaop ...

  4. Linux中的ftp命令怎么写,linux中的ftp命令用法

    Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由学习啦小编为大家整理了linux中的ftp命令用法相关知识,希望对大家有帮助! linux中的ftp命令用法 1. 连接ftp服务 ...

  5. Linux中的cat命令用法

    linux中的cat有三种用法: -列举所有文件 -创建文件 -合并文件 详细请看: http://www.cnblogs.com/perfy/archive/2012/07/23/2605550.h ...

  6. linux的source命令,Linux中source命令的用法

    Linux中source命令的用法 Linux系统中,source命令通常用"."来代替,是一个点命令,与一般的命令有所不同,下面小编就给大家介绍下Linux中source命令的用 ...

  7. linux命令seq,Linux 中seq 命令的用法

    Linux 中seq 命令的用法 用于产生从某个数到另外一个数之间的所有整数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 ...

  8. linux 中的 ln 命令,Linux中ln命令的用法以及分析

    在ubuntu用也有类似于windows中快捷方式这种类型的东西,即链接.这里一般使用ln命令来执行得到,ln命令用法简单,但是与windows不同,这里有硬链接和软链接两种类型的链接.在介绍两种链接 ...

  9. linux ldd命令源代码,Linux中ldd命令的用法详解

    Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面小编就给大家介绍下Linux下ldd命令的使用方法,感兴趣的朋友一起来学习下吧. ldd命令用于判断某个可执 ...

最新文章

  1. Linux安装Nginx、Redis、django
  2. 推荐GitHub 上六大爆款AI学习项目,Star超过5.6w
  3. python刷b站教程_python + selenium 刷B站播放量的实例代码
  4. 给网游写一个挂吧(二) – 启动外挂上
  5. b 计数器位选信号 verilog_Verilog HDL菜鸟学习笔记———三、Verilog常用语法之一...
  6. Excel VBA - 文件及目录操作
  7. NodeBlog v0.1.0发布
  8. rpm安装与yum安装的区别与特点
  9. python_scrapy_爬虫
  10. python源码剖析-笔记2
  11. 设计一个简易的网吧计费系统
  12. 手机如何打开html文件怎么打开,怎么在手机上打开HTML文件怎么打开
  13. Progress实现进度条效果
  14. CAS号:60535-02-6,二肽Met-Trp
  15. python开发工程师是什么级别_什么条件才能成为Python开发工程师
  16. 全国女人都当妓女的古代神秘国(转载)
  17. 怎么让鼠标带黄色光圈?
  18. linux安装xbox无线手柄,ROS配置和使用Xbox One无线手柄
  19. CI/CD之搭建私有git仓库gitlab
  20. JavaScript与CSS的交互(五)

热门文章

  1. 计算机自动化考研英语应达到几级,考研英语需要过几级?
  2. linux amd64目录,如何在Ubuntu 10.04 (amd64)下面安装X-Plane
  3. 如何从 MySQL 读取 100w 数据进行处理
  4. 第十七章 类关键字 - DependsOn
  5. SQL学习计划-SQL语法复习笔记
  6. 设计模式 - 创建型模式_抽象工厂模式
  7. 51单片机计算器(源程序+流程图+答辩报告+综合设计)
  8. 使用Python编程求函数极限【例1】
  9. “河北超生女婴被抱走”案二审驳回上诉维持原判
  10. 在线教育项目Day04--后台管理系统集成方案vue-element-admin