從C++開始的編程生活(9)——模板初階

前言

本系列文章承接C語言的學習,需要有C語言的基礎才能學會哦~
第8篇主要講的是有關于C++的模板初階
C++才起步,都很簡單!!

目錄

前言

模板初階

基本語法

函數模板的實例化

顯式實例化的作用

類模板

基本語法


模板初階

模板,也就是函數模板,調用實例化后才會成為函數。

基本語法

沒使用模板前,我們為了適配不同的數據類型,需要寫三個甚至更多的Swap函數,但他們的邏輯是類似的,甚至完全一樣

void Swap(int& left, int& right)
{int temp = left;left = right;right = temp;
}
void Swap(double& left, double& right)
{double temp = left;left = right;right = temp;
}
void Swap(char& left, char& right)
{char temp = left;left = right;right = temp;
}

代碼1↑

使用模板后

//模板
template<typename T>
void Swap(T& left, T&right)
{T temp = left;left = right;right = temp;
}int main()
{int x = 0, y = 1;double m = 1.1, n = 2.2;//調用Swap(x, y);Swap(m, n);return 0;
}

代碼2↑

typename是關鍵字也可以用class,兩者有些許區別,后面再講。
T為模板參數,可以有多個模板參數,逗號分隔,模板參數在實例化時可替換為數據類型,同一個模板參數只能替換為同一個數據類型。
調用時,編譯器會根據傳入參數推演,把T替換為對應的數據類型,由編譯器幫助生成實例化函數。Swap(x,y)會實例化為代碼1中的第一段Swap,Swap(m,n)會實例化為第二段Swap,調用的是不同的函數

函數模板的實例化

分為隱式實例化顯式實例化

?//模板
template<typename T>
void Swap(T& left, T&right)
{T temp = left;left = right;right = temp;
}//隱式實例化
Swap(x, y);
Swap(m, n);
//或者自行強制類型轉化
Swap(x, (int)n);
Swap((double)x, n);//顯式實例化
Swap<int>(x, m);
Swap<double>(x, m);

隱式實例化:編譯器根據實參推演模板參數的實際類型。
顯式實例化:用尖括號<>指明模板參數的替換。

顯式實例化的作用

T func(size_t n)
{return T;
}

如上函數,代碼無法通過函數參數推演出模板參數要替換成的實際類型,因此需要顯式實例化指明類型。

func<int>(2);

tips1:如果運行代碼Add(2, 3),程序會調用哪段代碼?

int Add(int a, int b)
{return a + b;
}template<class T>
T Add(T a, T b)
{return a + b;
}

會調用第一段代碼,有現成的用現成的,減少推演的步驟,提高效率。
如果非要調用模板,那就運行代碼Add<int>(2, 3),用顯式實例化讓程序使用模板

tips2:如果運行Add(1.1, 2),就運行第三段模板代碼;如果運行Add(1.1, 2.2),就運行第二段模板代碼

?
int Add(int a, int b)
{return a + b;
}template<class T>
T Add(T a, T b)
{return a + b;
}?template<class T1, class T2>
T1 Add(T1 a, T2 b)
{return a + b;
}

哪個方便用哪個。

類模板

與函數模板用法十分類似。

基本語法

template<typename T>
{
public:Stack(size_t capacity = 4){_array = new T[capacity];_capacity = capacity;_size = 0;}void Push(const T& data);private:T* _array;size_t _capacity;size_t _size;
};template<class T>
void Stack<T>::Push(const T& data)
{_array[_size++] = data;//········
}

同上:
是模板,不是實體,需要實例化
②分為隱式實例化顯式實例化
同一模板參數替換的數據類型不同的時候,實例化出來的對象不屬于同一類
哪個模板方便推演用哪個現成的就用現成的

tips:
類模板的聲明與定義分離需要注意——定義的時候要帶上模板參數

函數參數和模板參數十分類似,前者傳遞的是對象,后者傳遞的是數據類型。而且都可以用缺省參數

?~~本文完結!!感謝觀看!!接下來更精彩!!歡迎來我博客做客~~?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/100419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/100419.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/100419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡——傳輸層(25王道最新版)

傳輸層傳輸層提供的服務進程 端口號 傳輸層協議之間的關系socket套接字有鏈接 VS 無連接 | 可靠 VS 不可靠UDP數據報及檢驗數據報格式檢驗方法TCPTCP協議的三大階段TCP報文段格式&#xff08;很重要&#xff09;建立連接&#xff08;三次握手&#xff09;&#xff08;超級超級重…

羽毛球地板:從專業運動場景到全民健身市場的技術躍遷與產業重構

在全球體育產業向“專業化大眾化”雙軌并行的趨勢下&#xff0c;羽毛球地板作為運動場景的核心基礎設施&#xff0c;正經歷從單一功能型產品向“性能優化場景適配智能管理”一體化解決方案的轉型。據QYResearch統計&#xff0c;2031年全球羽毛球地板市場規模將達15.95億元&…

R 語言查看類庫源碼的方法

你想查看 getGEO&#xff08;來自 R 語言 GEOquery 包&#xff09;的源碼&#xff0c;這能幫你更好理解其工作原理和數據處理細節。由于 getGEO 是 R 函數&#xff0c;查看方法與 Python 有所不同。下面為你提供幾種主要方法。 方法 適用場景 關鍵命令/操作 在 R 控制臺直接查看…

SQL,posexplode 用法示例

示例1 -- 創建測試數據 WITH test_data AS (SELECT array(apple, banana, cherry) as fruits ) SELECT pos, col FROM test_data LATERAL VIEW posexplode(fruits) t AS pos, col;結果 pos | col ----|------- 0 | apple 1 | banana 2 | cherry示例2 -- 假設有一個用戶表…

數據庫造神計劃第十天---數據庫約束(1)

&#x1f525;個人主頁&#xff1a;尋星探路 &#x1f3ac;作者簡介&#xff1a;Java研發方向學習者 &#x1f4d6;個人專欄&#xff1a;《從青銅到王者&#xff0c;就差這講數據結構&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此簡單&a…

知微傳感Dkam系列3D相機SDK例程篇:CSharp連接相機及保存數據

序言 寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。 知微傳感Dkam系列3D相機可以應用于定位分揀、焊接焊縫提…

[筆記] 系統分析師 第十二章 軟件架構設計(分析師主要工作)

文章目錄前言12.1 軟件架構概述12.1.1 軟件架構的意義12.1.2 軟件架構的發展史12.2 軟件架構建模12.3 軟件架構風格12.3.1 軟件架構風格概述12.3.2 數據流體系結構風格1.批處理體系結構風格2.管道-過濾體系結構風格12.3.3 調用/返回體系結構風格1.主程序/子程序風格2.面向對象體…

C++---存儲周期,作用域,鏈接性

在C程序設計中&#xff0c;變量的行為不僅由其類型決定&#xff0c;還由存儲周期&#xff08;變量在內存中存在的時間&#xff09;、作用域&#xff08;變量可被訪問的代碼范圍&#xff09;和鏈接性&#xff08;變量在多文件程序中的可見性&#xff09;共同約束。 一、存儲周期…

基于Python的商品爬取與可視化系統

本系統是基于Python的商品數據爬取與價格分析可視化系統&#xff0c;集成了數據爬取、數據存儲、數據展示和可視化分析等功能。下面介紹一下系統主要功能和技術棧。一、主要功能&#xff1a;1、數據爬取功能 支持淘寶美妝商品數據爬取 可配置搜索關鍵詞和爬取頁數 實時顯示爬取…

聯邦學習過程中,了解清楚影響準確率的因素有哪些也很重要

影響模型準確率的因素有很多&#xff0c;下面是一些主要的因素&#xff0c;它們可以從數據、模型設計、訓練策略以及超參數等多個層面來考慮。1. 學習率作用&#xff1a;學習率直接影響模型的訓練速度、穩定性和最終表現。過高的學習率可能導致模型不收斂或收斂不穩定&#xff…

C# WPF中使用System.Management.Automation類調用Powershell報錯解決辦法

在WPF開發中&#xff0c;需要使用powershell進行自動化管理&#xff0c;以下為開發環境 1、.NET framework 4.7.2 2、VS2019 社區版 使用System.Management.Automation類 遇到的問題&#xff1a; 需要引用 System.Management.Automation類&#xff0c;但是在使用using指令時無法…

從 Pump.fun「直播」看熱點幣的生與死

在加密市場里&#xff0c;熱點就是流量&#xff0c;流量就是價值。最近&#xff0c;Solana 生態的 Pump.fun 推出了「直播」板塊&#xff0c;讓發幣這件事變得像看秀一樣&#xff1a;一個個新幣在鏈上實時登場&#xff0c;社區即時互動&#xff0c;玩家實時下注。這種形式不僅帶…

圖靈完備性:計算理論的基石與無限可能

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1 圖靈完備性的基本概念 圖靈完備性&#xff08;Turing completeness…

HarmonyOS 5.0應用開發——V2裝飾器@once的使用

【高心星出品】 文章目錄V2裝飾器once的使用概念一、核心作用與規則二、適用場景案例V2裝飾器once的使用 概念 在鴻蒙ArkTS開發中&#xff0c;Once裝飾器用于實現子組件僅接受父組件傳遞的初始值&#xff0c;后續父組件數據變化不再同步至子組件。以下是其核心要點&#xff1…

跨域請求:解決方案

一、跨域核心概念&#xff1a;同源策略與跨域定義 跨域問題的根源是瀏覽器的 同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;這是瀏覽器為保護用戶數據安全而設置的核心安全限制。 1. 什么是 “同源”&#xff1f; “同源” 指的是兩個 URL 的 協議、域名…

前端形態與樣式風格:從古典到現代的視覺語言演進

目錄前端形態與樣式風格&#xff1a;從古典到現代的視覺語言演進概述1. 前端形態的演進&#xff1a;四種核心范式1.1 古典范式&#xff1a;語義化HTML與CSS1.2 組件化范式&#xff1a;模塊化與復用1.3 響應式范式&#xff1a;多端適配1.4 動態范式&#xff1a;狀態驅動視圖2. 樣…

用戶系統從0到1:登錄、權限、積分一網打盡

&#x1f464; 用戶系統從0到1&#xff1a;登錄、權限、積分一網打盡 副標題&#xff1a;Flask-Login 多級權限 積分會員系統實戰 項目原型&#xff1a;https://madechango.com 難度等級&#xff1a;???☆☆ 預計閱讀時間&#xff1a;20分鐘 &#x1f3af; 引子&#xff1…

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級引言&#xff1a;正文&#xff1a;一、傳統安防監控的 “三重困局”&#xff1a;看不全、看不懂、反應慢1.1 人工盯屏 “力不從心”1.1.1 攝像頭密度與人力的矛盾1.1.2 錄像調閱 “馬后炮”1.2…

OpenHarmony包管理子系統核心源碼深度解讀:從BundleManager到AMS,徹底打通應用安裝、卸載與沙箱機制全鏈路

目錄 架構概覽 核心組件詳解 包安裝流程分析 包卸載流程分析 包更新流程分析 包信息存儲機制 Launcher界面管控 開機默認系統應用安裝機制<

簡單聊聊神經網絡中的反向傳播

參考文章&#xff1a; 一文弄懂神經網絡中的反向傳播法——BackPropagation - Charlotte77 - 博客園 反向傳播求偏導原理簡單理解_反向傳播偏導-CSDN博客 這篇文章是筆者在讀完上述兩篇參考文章后的整理或者說按照自己的理解進行的一些補充&#xff0c;強烈推薦先閱讀上述兩篇文…