c++STL基础部分(二) 之模板

本文介绍C++ STL中的模板概念,包括函数模板和类模板的基本用法,并通过一个动态数组模板类的具体实例来阐述STL的通用性和类型安全性。

 C++STL基础部分(二) 之模板

1.引言

a.模板是C++中重要的概念,它提供了一种通用的方法来开发可重用的代码,说白了, 就是为了图省事:),使用模板可以帮助我们创建参数化的C++类型.

b.C++中模板分为两种类型:函数模板类模板.

c.函数模板的用法同C++预处理器的用法很相似,都可以提供编译代码中的文本替换功能,但前者可以对类型进行一定的保护,实用类模板可以编写通用的,类型安全的类

在C++中仍然要用到函数模板和类模板,本文将初步阐述一些具体的STL模板思维


2.通过模板来初识STL的思想

稍微有点C++基础的读者应该对模板有一定的印象,那么是否C++中的模板与STL模板不一样呢,其实很相似(哭笑),STL并没那么神秘,也没有用到什么新技术,下面举个例子来

说明一下。

Example 2.1编制动态数组的模板类

#include<stdio.h>

template<class T>

class MyArray
{
   private:
       
	   int m_nTotalSize;    //数组总长度
	   
	   int m_nValidSize;    //数组有效长度
	   
	   T *m_pData;           //数据
   
   public:
       
	   MyArray(int nSize=3) //这里默认数组长度为3
	   {
	   	 m_pData=new T[nSize];
		 
		 m_nTotalSize=nSize;
		 
		 m_nValidSize=0; 
	   }	   	
	void Add(T value)       //向m_pData添加数据
	    {
		   if(m_nValidSize<m_nTotalSize) //如果有效长度小于总长度
		   {
		   
		      m_pData[m_nValidSize]=value; //则赋值
			  m_nValidSize++;     //有效长度+1 
	        }
		
  	       else
	      {
	          int i=0;
		
		      T *tmpData=new T(m_nTotalSize);  //原始数据备份
	    
		      for(i=0;i<m_nTotalSize;i++)
		     {
		      tmpData[i]=m_pData[i];	
		     }		
		
		   delete []m_pData;  //释放原始数据原始空间
		
	       m_nTotalSize*=2;   //原始数据空间重新分配,空间扩大1倍
	    
	  	   m_pData=new T[m_nTotalSize]; //传回备份数据
		
		  for(i=0;i<m_nValidSize;i++)
		  {
		    m_pData[i]=tmpData[i];	
	      }   
	    
		    delete []tmpData;
	    
		    m_pData[m_nValidSize]=value;
	    
		    m_nValidSize++;
	    
          }
		 
       }  

int GetSize()  //返回数组有效长度
{
    return m_nValidSize;    
} 

T Get(int pos)  //返回某一位置元素
{
	  return  m_pData[pos];
} 

  virtual ~MyArray()
  {
	if(m_pData!=NULL)
	{
		delete []m_pData;
		m_pData=NULL; 
	}
  }
};

int main(int argc,char *argv[])
{
    MyArray<int>obj;
    
	obj.Add(1);
	
	obj.Add(2);
	
	obj.Add(3);
	
	obj.Add(4);
	
	for(int i=0;i<obj.GetSize();i++)
	{
		printf("%d\n",obj.Get(i)); 
	} 
	
	return 0;
	
}
输出结果如图所示

 本篇持续更新中...




朋友都知道,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值