<二>類模板

来源:https://www.cnblogs.com/erichome/archive/2022/11/16/16894873.html
-Advertisement-
Play Games

類模板=>實力化=>模板類 通過類模板實現棧,點擊查看代碼 #include <iostream> #include <cstring> using namespace std; template<typename T> //template<typename T=int> 也可以這樣寫,寫個預設類 ...


類模板=>實力化=>模板類

通過類模板實現棧,點擊查看代碼
#include <iostream>
#include <cstring>
using namespace std;

template<typename T>
//template<typename T=int> 也可以這樣寫,寫個預設類型
//這是個模板名稱 ,模板名稱+類型參數列表=類名稱
class MyStack {

public:
        //在構造和析構函數名字後面可以不加<T>
	MyStack<T>(int _size = 10) :
		size(_size),
		top(-1),
		pHead(new T[size])
	{
	}

	//拷貝構造
	MyStack<T>(const MyStack<T> & src)
		: top(src.top),
		size(src.size)
	{
		pHead = new T[size];
		for (int i = 0; i<top; i++) {
			pHead[i] = src.pHead[i];
		}
	}

	MyStack<T> & operator=(const MyStack<T> & src) {
		if (this == &src) 
		{
			return *this; 
		}
		delete[] pHead;
		
		pHead = new T[size];
		for (int i = 0; i<src.top; i++) {
			pHead[i] = src.pHead[i];
			top++;
		}
		return *this;
	}

	//析構棧
	~MyStack() {
		delete[] pHead;
		pHead = nullptr;
	}

	//彈棧
	void pop() {
		if (Empty()) { return; }
		this->top--;
	}

	T getTop() const {
		if (Empty()) {
			 throw "Stack is Empty";			
		}
		else {
			return pHead[top-1];
		}
		
	}

	//壓棧
	void push(const T & _val) {
		if (Full()) {
			Expend();
		}
		if (Empty()) { top = 0; }
		pHead[top++] = _val;
	}

	//是否是空的
	bool Empty()const {
		return top<0;
	}
	//是否是滿的
	bool Full()const {
		return top == size-1;
	}

	void show() const {
		for (int i = 0; i < this->top; i++) {
			cout << pHead[i] << endl;
		}
	}
      
        void Test()const;

private:
	int size;//定義棧大小
	int top;//定義棧頂位置
	T   *pHead; //定義棧底指針

	//空間擴展
	void Expend() {
		int newSize = 2 * size;
		T *tepPHead = new T[newSize];
		for (int i = 0; i < top; i++) {
			tepPHead[i] = pHead[i];
		}
		this->size = newSize;
		delete[]this->pHead;
		this->pHead = tepPHead;

	}

};

template<typename T>
void MyStack<T>::Test()const {
	cout << "Test" << endl;
}


int main() {

        //類模板的選著性實例化
        //模板類 class MyStack<int>{};
	MyStack<int>  s1;

	s1.push(100);
	s1.push(50);
	s1.push(20);
	s1.push(200);

	s1.show();

	int topVal = s1.getTop();
	cout << topVal << endl;
	
	system("pause");
	return 1;
}

//類模板的選著性實例化 模板類 class MyStack{};
類模板是把類中的數據類型參數化
類模板的使用
類模板和函數模板的區別
類模板的預設參數
類模板的預設參數註意

類模板不會自動推導數據類型,要顯示的告訴編譯器是什麼類型
預設的參數必須放在最後一個,換句話說,預設參數後面不能再出現非預設參數


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 生成器是一種特殊的迭代器,也可以說其父類型是迭代器 1、迭代器其實也有很多點要清楚,這裡先不做贅述 2、要清楚,迭代器調用iter()返回的是自身 1 def func(s, e): 2 """ 3 生成器函數 4 :param s:起始值 5 :param e: 末值 6 :return: 7 " ...
  • scanf在vs2022中是一個不安全的函數,vs自定義scanf_s是一個安全的函數,但是這在轉給其他編譯器可能不適用 我們可以在開頭加上一個#define _CRT_SECURE_NO_WARNINGS 1可以解決問題 但是自己打比較麻煩,這個時候我們可以打開vs編譯器的文件然後找到VC這個文件 ...
  • 平常是處理文字的時候更多用到的是字元串方面的工具類,作為學習漢字的工具,拼音還是很重要的一個輔助方式,分享一個漢字轉拼音的工具類。可以用於幫助學習漢字或者作為一些漢字的輔助說明都也是可以的。這個還支持將漢字拼音輸出為首字母,例如"愷龍"可以輸出為"kl",在現在大家很多時候都用縮寫的情況下,可以也可 ...
  • 1.HTTP是什麼? http是超文本傳輸協議用來在web瀏覽器和網站伺服器之間傳遞數據信息,http以明文的方式發送內容,不提供任何方式的數據加密,如果攻擊者截獲了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付 ...
  • 1、使用註解需要導入的依賴 1、1在application.xml文件中加入該約束 xmlns:context=http://www.springframework.org/schema/context http://www.springframework.org/schema/context ht ...
  • 我國目前並未出台專門針對網路爬蟲技術的法律規範,但在司法實踐中,相關判決已屢見不鮮,K 哥特設了“K哥爬蟲普法”專欄,本欄目通過對真實案例的分析,旨在提高廣大爬蟲工程師的法律意識,知曉如何合法合規利用爬蟲技術,警鐘長鳴,做一個守法、護法、有原則的技術人員。 案情介紹 2018年1月至7月期間,咼某興 ...
  • 大家好,我是棧長。 今天給大家通報一則框架更新消息,時隔兩個月,Spring Cloud 2021.0.5 最新版發佈了,來看下最新的 Spring Cloud 版本情況: Spring Cloud 無疑是現在 Java 微服務事實上的標準,完全基於 Spring Boot 構建,依賴 Spring ...
  • 目錄 一.freeglut 簡介 二.freeglut 下載 五.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 特效 零基礎 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...