做视频素材网站/seo指的是搜索引擎
C++:模板与泛型
Q1: 在编译代码时,若出现这样一个情形:实现的功能一样,但处理的数据类型(例如:int、string、class)不一样;你会怎么解决?
Ans: 最开始的想法则是复制粘贴重写一遍,仅仅改变数据类型,其余一样,但解决后发现代码冗余严重,这时模板与泛型展现其优势。
#include <iostream>
using namespace std;template<typename T,int SZ=16> //预先声明
class MStack {
public:MStack();~MStack();bool push(T ele);bool pop(T& ele);void print(ostream& os)const;int Capacity()const {return m_nSize - m_nTop - 1;}
private:T* m_pData;int m_nSize;int m_nTop = -1;
};template<typename T,int SZ> //预先声明
MStack<T, SZ>::MStack() {m_nSize = SZ;m_pData = new T[m_nSize];memset(m_pData, 0, m_nSize * sizeof(T));
};template<typename T, int SZ> //预先声明
MStack<T, SZ>::~MStack() {delete[] m_pData;
};template<typename T, int SZ> //预先声明
bool MStack<T, SZ>::push(T ele) {if (m_nTop + 1 == m_nSize) return false;m_pData[++m_nTop] = ele;return true;
};template<typename T, int SZ> //预先声明
bool MStack<T, SZ>::pop(T& ele) { if (m_nTop == -1) return false;ele = m_pData[m_nTop--];return true;
};template<typename T, int SZ> //预先声明
void MStack<T, SZ>::print(ostream& os)const {for (int i = 0; i <= m_nTop; i++) {os << m_pData[i] << endl;};
};int main()
{MStack<int, 8> ms1;MStack<float, 32> ms2;ms1.push(10);ms1.push(20);ms2.push(3.5f);ms2.push(100.0f);//cout << ms2[1] << endl;float fEle;ms2.pop(fEle);cout << fEle << endl;cout << ms1.Capacity() << endl;ms1.print(cout);ms2.print(cout);cout << ms2.Capacity() << endl;return 0;
}