10,遍歷任意參

遍歷可變參數

  • 遍歷可變參數
  • 獲取可變參數大小
  • 通過遞歸方式遍歷可變參數
  • 通過可變參數特性來求和

遍歷可變參數

#pragma oncetemplate<class ... ParamTypes>
void Func(paramTypes &... param)
{}

可以看作是有一個結構體里面裝滿了參數,把結構體放到…中。就是一塊內存傳進去了

遇到需要遍歷任意參時按下列代碼執行即可

advanced.h

#pragma once
#include <iostream>
using namespace std;template<class T>
char PrintArg(T& arg)
{cout << arg << endl;return 0;//寫上此行代碼可以讓(PrintArg(param),0)變為PrintArg(param)
}template<class ... ParamTypes>
void Func(ParamTypes &... param)
{//std::forward()//可以把右值移到左值char arr[] = { PrintArg(param)... };//展開時會出現拷貝//char arr[] = {(PrintArg(param),0)... };//意思是展開param參數,之后在PrintArg打印//0在此處作用位占位,展開后如下,寫1就用1占位//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//也可以寫成下列代碼,會展開成字節碼//char arr[] = { param ... };
}

學習.cpp

#include <iostream>
#include"advanced.h"int main()
{int a = 10;float b = 20.0f;char c[] = "Hello";Func(a,b,c);return 0;
}

輸出結果:

10
20
Hello

獲取可變參數大小

固定語法,直接寫

advanced.h

#pragma once
#include <iostream>
using namespace std;//獲取長度
template<class ... ParamTypes>
void FuncLen(ParamTypes &... param)
{cout << sizeof...(param)<<endl;
}

學習.cpp

#include <iostream>
#include"advanced.h"int main()
{int a = 10;float b = 20.0f;char c[] = "Hello";FuncLen(a, b, b);return 0;
}

輸出結果:

3

通過遞歸方式遍歷可變參數

犧牲可讀性來換高效遍歷

advanced.h

#pragma once
#include <iostream>
using namespace std;//匹配遞歸遍歷時的極端情況 沒有參數
void FuncFindParam()
{cout << "沒參數了" << endl;
}
//通過遞歸來遍歷參數
template<class T,typename ... ParamTypes>
void FuncFindParam(T& Head, ParamTypes &...Param)
{cout << "Head = " << Head << endl;FuncFindParam(Param...);//相當于一個數組,去一個元素,刪掉一個元素,最后遍歷完成數組變為空
}

學習.cpp

#include <iostream>
#include"advanced.h"int main()
{int a = 10;float b = 20.0f;char c[] = "Hello";FuncFindParam(a, b, c, a, b, c);return 0;
}

輸出結果:

Head = 10
Head = 20
Head = Hello
Head = 10
Head = 20
Head = Hello
沒參數了

通過可變參數特性來求和

advanced.h

#pragma once
#include <iostream>
using namespace std;//輸出結果
template<typename ParamTypes>
ParamTypes &FunValue(ParamTypes &Param)
{return Param;
}
//求和
template<class T,typename ... ParamTypes>
T FunValue(T& Head,ParamTypes &... Param)
{return Head + FunValue<T>(Param ...);
}

學習.cpp

#include <iostream>
#include"advanced.h"int main()
{int a1 = 10;int a2 = 20;int a3 = 30;int i = FunValue(a1, a2, a3);cout << i << endl;return 0;
}

輸出結果:

60

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

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

相關文章

Git多版本并行開發實踐

本文目的&#xff1a; 實現多個項目同時進行的git多版本管理工作流。 名詞解釋&#xff1a; feature-XXXX&#xff1a;特性分支指CCS中一個項目或者一個迭代&#xff0c;在該分支上開發&#xff0c;完成后&#xff0c;合并&#xff0c;最后&#xff0c;刪除該分支&#xff0c;…

【廣州虛擬現實開發】VR智能中控系統進一步提高VR教學管理水平

隨著科技的不斷發展&#xff0c;虛擬現實(VR)技術已經逐漸走進了人們的生活。在教育領域&#xff0c;VR技術也得到了廣泛的應用&#xff0c;尤其是在教學終端中控系統方面。那么&#xff0c;廣州華銳互動開發的VR智能中控系統對學校有何益處呢&#xff1f; 首先&#xff0c;VR智…

RocketMQ(模式詳解,安裝)及控制臺安裝

下載 環境 64位操作系統&#xff0c;推薦 Linux/Unix/macOS 64位 JDK 1.8下載地址 https://rocketmq.apache.org/zh/download/ RocketMQ 的安裝包分為兩種&#xff0c;二進制包和源碼包。 二進制包是已經編譯完成后可以直接運行的&#xff0c;源碼包是需要編譯后運行的。 單…

LVS負載均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;負載均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;數據包的流向如下&#xff1a; 客戶端發送請求到負載均衡器&#xff08;LVS&#xff09;的虛擬IP&#xff08;VIP&#xff09;。負載均衡器&#x…

基于C++ 的OpenCV繪制多邊形,多邊形多條邊用不用的顏色繪制

使用基于C的OpenCV庫來繪制多邊形&#xff0c;并且為多邊形的不同邊使用不同的顏色&#xff0c;可以按照以下步驟進行操作&#xff1a; 首先&#xff0c;確保你已經安裝了OpenCV庫并配置好了你的開發環境。 導入必要的頭文件&#xff1a; #include <opencv2/opencv.hpp&g…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 調度程序專業版,專業的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一個專業有大腦的調度UI組件。Scheduler Pro 可幫助您安排任務&#xff0c;同時考慮資源和任務的可用性。 連接您的任務 讓 Scheduler Pro 處理剩下的事情。它將根據您定義的鏈接安排您的任務并遵守任…

BNC連接器市場分析:全球BNC連接器市場規模不斷增長

產品定義及統計范圍 BNC&#xff08;Bayonet-Neill-Concelman&#xff09;連接器是一種通常用于視頻和音頻信號傳輸的電連接器。它是以其兩位發明者Paul Neill和Carl Concelman的名字命名的&#xff0c;他們在20世紀40年代末開發了這種連接器。BNC連接器是一種設計用于同軸電纜…

ansible 修改遠程主機nginx配置文件

安裝ansible brew install ansible 或者 pip3 install ansible 添加遠程主機 設置秘鑰 mac登錄遠程主機 ssh -p 5700 root192.168.123.211 ssh localhost #設置雙機信任 ssh-kyegen -t rsa #設置主機兩邊的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…

UniApp 制作高德地圖插件

1、下載Uni插件項目 在Uni官網下載Uni插件項目&#xff0c;并參考官網插件項目創建插件項目. 開發者須知 | uni小程序SDK 如果下載下來項目運行不了可以參考下面鏈接進行處理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官網下載對應SD…

207. 課程表

思路 首先要完全理解題意&#xff0c;這道題的[a,b]并不是b滿足了a就可以真正的學習a這門課了&#xff0c;因為a還有可能需要其他選修課的條件。類似下圖。 ??這題的思路在于使用合適的數據結構來存儲&#xff0c;這里用hash表來存儲如果1這門課可以修了之后&#xff0c;可以…

docker pull 設置代理 centos

On CentOS the configuration file for Docker is at: /etc/sysconfig/docker 用 root 權限打開 text editor sudo gedit 注意 加引號 Adding the below line helped me to get the Docker daemon working behind a proxy server: HTTP_PROXY“http://<proxy_host>:&…

linux下shell編寫軟件看門狗

遇到一個問題&#xff0c;就是軟件崩潰&#xff0c;可以讓軟件自動重啟&#xff0c;而且數據庫必須是軟件崩潰之前的 #!/bin/sh while true do /app/app/record -qws cp -pr /msata/db/db_record.db /data/log/db_record.db mv /msata/db/db_record1.db /msata/db/db_record.d…

ubuntu20.04磁盤滿了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%

問題 執行 mysql 大文件導入任務&#xff0c;最后快完成了&#xff0c;查看結果發現錯了&#xff01;悲催&#xff01;都執行了 兩天了 The table ‘XXXXXX’ is full &#xff1f; 磁盤滿了&#xff1f; 剛好之前另一個 centos 服務器上也出現過磁盤滿了&#xff0c;因此&a…

神經網絡基礎-神經網絡補充概念-30-搭建神經網絡塊

概念 搭建神經網絡塊是一種常見的做法&#xff0c;它可以幫助你更好地組織和復用網絡結構。神經網絡塊可以是一些相對獨立的模塊&#xff0c;例如卷積塊、全連接塊等&#xff0c;用于構建更復雜的網絡架構。 代碼實現 import numpy as np import tensorflow as tf from tens…

LeetCode 38題:外觀數列

題目 給定一個正整數 n &#xff0c;輸出外觀數列的第 n 項。 「外觀數列」是一個整數序列&#xff0c;從數字 1 開始&#xff0c;序列中的每一項都是對前一項的描述。 你可以將其視作是由遞歸公式定義的數字字符串序列&#xff1a; countAndSay(1) "1"countAnd…

Linux后門大全-inetd后門(一)

環境 靶機&#xff1a;Ubuntu 16.04.7 LTS &#xff08;最好使用相同的版本或更老的版本&#xff0c;inetd是非常老的系統服務管理工具&#xff09; 192.17.0.4 攻擊機&#xff1a; 安裝inetd apt update apt-get install openbsd-inetd #檢查是否安裝成功,如果文件存在就安…

【使用群暉遠程鏈接drive掛載電腦硬盤】

文章目錄 前言1.群暉Synology Drive套件的安裝1.1 安裝Synology Drive套件1.2 設置Synology Drive套件1.3 局域網內電腦測試和使用 2.使用cpolar遠程訪問內網Synology Drive2.1 Cpolar云端設置2.2 Cpolar本地設置2.3 測試和使用 3. 結語 前言 群暉作為專業的數據存儲中心&…

《TCP IP網絡編程》第十六章

第 16 章 關于 I/O 流分離的其他內容 16.1 分離 I/O 流 「分離 I/O 流」是一種常用表達。有 I/O 工具可區分二者&#xff0c;無論采用哪種方法&#xff0c;都可以認為是分離了 I/O 流。 2次 I/O 流分離&#xff1a; 第一種是第 10 章的「TCP I/O 過程」分離。通 shutdown(soc…

C++STL——deque容器詳解

縱有疾風起&#xff0c;人生不言棄。本文篇幅較長&#xff0c;如有錯誤請不吝賜教&#xff0c;感謝支持。 &#x1f4ac;文章目錄 一.deque容器的基本概念二.deque容器常用操作①deque構造函數②deque元素操作③deque賦值操作④deque交換操作⑤deque大小操作⑥deque插入和刪除…

el-form組件相關的一些基礎使用

el-checkbox 01.description 多選單選框 02.場景舉例 需要對每一條數據展示她的某些狀態是否存在 03.代碼展示 <el-checkbox v-model"query.isAutoAccptncsign" true-label1 false-label0 :disabled"ifReview?true:false">自動發起承兌應答</…