c++ 模板 使用 及其优缺点
来源:互联网 发布:淘宝百宝箱满减 编辑:程序博客网 时间:2024/05/22 03:17
使用模板的目的:
模板是C++标准中相当重要的一部分,它是通用编程成为现实的理想方法。模板还有在编译时被解释的特点。模板是对迅速解决复杂问题有效手段,特别是标准模板类库
使用模板的优缺点:
(1) 优点 : 1)编写一个模板,就可以在实例化的时候 由一个模板解决不同类型数据所产生的相同问题;比如说排序问题,你可以给int 数据排序和cha类型数据排序,没有引入类模板,就需要编写两次排序函数,而引入类模板之后,就可以在实例化的时候,根据不同的数据类型实例化排序方法,做到一模板半多用的作用,即多态。
2)实现了代码的重用,节约了程序员时间和精力,这也是出现标准库的原因
(2) 缺点:1)模板的数据类型只能在编译时才能被确定。因此,所有用基于模板算法的实现必须包含在整个设计的头文件中。
2)由于模板只是最近加入C++标准中,所以有些C++编译器还不支持模板,当使用这些编译器时编译含有模板的代码时就会发生不兼容问题。
关于模板的例子
(1)函数模版
#include<iostream>using namespace std;template <typename T>T maximum(const T n1,const T n2){ if(n1>n2) return n1; else return n2;} int main(){ charc1='a',c2='b'; inti1=1,i2=2; double f1=2.5,f2=3.5; cout<<maximum(c1,c2)<<endl; cout<<maximum(i1,i2)<<endl; cout<<maximum(f1,f2)<<endl; return 0; }
(2)类模板
文件1: stack.h
#if !defined SATACK_T_H#define SATACK_T_H template <typename T>class stack { public: stack( int n = 10 ); ~stack(); bool pop(T & data_item); bool push(const T & data_item); inline int number_stacked()const; inline int stack_size() const; private: int max_size; int top; T* data; };template<typename T> stack<T>::stack(int n) { max_size = n; top = -1; data = new T[n]; } template<typename T> stack<T>::~stack( ) { delete [] data; } template<typename T>bool stack<T>::push(const T &data_item ) { if( top < max_size - 1) { data[++ top ] = data_item ; return true; } else return false; }template<typename T>bool stack<T>::pop(T & data_item) { if( top > -1 ) { data_item = data [top -- ]; return true; } else return false; }template<typename T>int stack<T>::number_stacked() const { return top+1; }template<typename T>int stack<T>::stack_size() const { return max_size; }#endif
在这里需要注意一个问题:
引用类模板时必须包含它的形参列表,这就是成员函数使用stack《T》而不是stack的原因。如果堆栈类不是模板,仅需要使用stack。
文件2:
Stack1.cpp
#include<iostream>#include"stack.h"using namespace std;int main() { stack<int> i_stack; stack<char> c_stack(5); int i,n,int_data; char char_data; bool success; c_stack.push('a'); c_stack.push('b'); c_stack.push('c'); n= i_stack.stack_size(); for( i = 0; i < n ; i ++ ) { i_stack.push(i); } cout<<"character stack data: "<<endl; n=c_stack.number_stacked(); for( i= 0; i <n ; i ++ ) { success = c_stack.pop (char_data); if( success ) cout<<char_data<<''; } cout<<endl; cout<<"integer stack data: "<<endl; n = i_stack.number_stacked(); for( i= 0; i <n ; i ++ ) { success = i_stack.pop (int_data); if( success ) cout<<int_data<<' '; } cout<<endl; return 0; }
- c++ 模板 使用 及其优缺点
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- C++中用模板模拟多态及其优缺点
- C++:函数模板、类模板及其特化
- 模板,模板的制定及其使用
- 类模板与模板类及其使用
- 分析存储过程的使用场景及其优缺点
- EJB定时器及其优缺点
- 三层架构及其优缺点
- 索引及其优缺点
- 服务器集群及其优缺点!
- 三层架构及其优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点
- 绑定变量及其优缺点
- 绑定变量及其优缺点
- 绑定变量及其优缺点
- 平衡二叉树
- 用Add-in Express .NET创建一个COM加载项项目
- 今天上班在资源丰富共享问题上有收获让我增加底气
- poj 2393 Yogurt factory
- Tomacat启动不了报错--org.apache.catalina.deploy.WebXml addFilter
- c++ 模板 使用 及其优缺点
- 用户名密码大小写问题
- 如何学习ruby
- RSA数字加签验签及字符编码
- C++读写excel文件(一)—— 用ODBC读写(by yukin_xue)
- Web架构“圣经”-------HTTP权威指南--4
- 【EXE PE】.rsrc 节与 resource table
- VOIP 学习的网站
- Spring MVC 3.2 技术预览(二):实时更新技术