【C++】類模板(template)
阿新 • • 發佈:2018-12-04
需求:寫一個可變長度的陣列類Array,用於存放若干元素,個數未知
設計:內部動態申請一個buffer
capacity:表示buffer的大小
size:表示buffer中已經存放元素的個數
#include "stdafx.h" #include <stdio.h> #include <string.h> template <typename T>//也可以寫作template <class T> class Array { public: Array(int capacity = 4) { m_buffer = new T[capacity]; m_capacity = capacity; m_size = 0; } void PushBack(T val) { if (m_size >= m_capacity) { Resize(); } m_buffer[m_size] = val; m_size++; } int Capacity() { return m_capacity; } int Size() { return m_size; } private: void Resize() { //建立一個更大的緩衝區 int n = m_capacity + 4; T* buf = new T[n]; //拷貝所有內容 memcpy(buf, m_buffer, m_capacity); //刪除舊的記憶體 delete[] m_buffer; //更新成員變數 m_capacity = n; m_buffer = buf; } private: T* m_buffer; int m_capacity; //容量 int m_size; //已經存放的物件的個數 }; int main() { Array <int> a; //也可以是Array <int> a(4); a.PushBack(1); a.PushBack(2); a.PushBack(3); a.PushBack(4); a.PushBack(5); int size = a.Size(); int capacity = a.Capacity(); return 0; }
從 Array <int> a; //也可以是Array <int> a(4); 這段程式碼表明如果Array建構函式中有預設值的引數時,你可以給傳參也可以不傳參,他都會進入Array(int capacity = 4){}這個建構函式。