最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析C++元組tuple類型

 更新時間:2022年06月14日 08:57:06   作者:CairBin  
元組tuple是C++的一個模板,不同tuple類型的成員類型也不相同,但是一個tuple可以有任意數(shù)量的成員,今天通過本文給大家介紹C++元組tuple類型,感興趣的朋友一起看看吧

介紹

元組tuple是C++的一個模板,不同tuple類型的成員類型也不相同,但是一個tuple可以有任意數(shù)量的成員。

每個tuple類型的成員個數(shù)是一定的,但是不同的tuple成員個數(shù)可以不同。

tuple的定義及初始化

使用tuple要引入tuple頭文件

#include <tuple>

tuple定義以及初始化(我們這里以成員類型為int、string、vector為例子)

tuple<int,string,vector<int>> test{1,"hello,world",{4,5,6}};

當然也可以使用它的構(gòu)造函數(shù)進行初始化

tuple<int, string,vector<int>> test(1,"hello,world",{4,5,6});

存在這種情況,表面上看起來沒有進行任何初始化操作,但實際上利用了不帶參數(shù)的默認構(gòu)造函數(shù)

tuple<size_t, size_t> test;	//每個成員的值為0

當然如果你這樣定義后,又想對test的初始值所作更改,可以這樣寫,如下所示。(實際上現(xiàn)在的test不是原來的test,它被你新創(chuàng)建的tuple對象所替代了,嚴格意義來講并不算是初始化)

tuple<size_t, size_t> test;	//每個成員的值為0
test = tuple<size_t, size_t>(1,2);	//第一個成員的值為1,第二個成員的值為2

另外標準庫定義了make_tuple函數(shù)來生成tuple對象,我們可以用auto關鍵字來推測生成的tuple的類型

auto test2 = make_tuple(3.14,"wasd");

如果要添加一個vector作為成員,則情況如下

//錯誤寫法
auto test2 = make_tuple(3.14,"wasd",{ 3,4,5 });
//正確寫法
vector<int> nums = { 3,4,5 };
auto test2 = make_tuple(3.14,"wasd",nums);

tuple的使用

成員訪問

說起tuple的使用,最能直接想到的自然是對tuple的訪問了。

在C++標準庫里,有一個名為get的函數(shù)模板。為了使用get,我們必須指定一個顯式模板實參來指示訪問的第幾個成員,并在函數(shù)參數(shù)中給予它一個tuple對象。

tuple<int, string, vector<int>> test{ 1,"hello,world",{4,5,6} };
cout << get<0>(test) << endl;		//打印test第一個成員,其類型為int
cout << get<1>(test) << endl;		//打印test第二個成員,其類型為string
cout << get<2>(test)[0] << endl;	//打印test第三個成員vector<int>的第一個元素

下面是返回結(jié)果

1
hello,world
4    

獲取tuple信息

可用以下方法獲取tuple元素個數(shù)

tuple<int, double, vector<string>> test{ 1,1.23,{"123","456"}};
//獲取tuple成員個數(shù)
size_t num = tuple_size<decltype(test)>::value;
//利用tuple某個成員類型來聲明變量(以第0個成員為例)
tuple_element<0, decltype(test)>::type n = get<0>(test);

拼接tuple

tuple<int, int, int> test(1,2,3);
tuple<int, int, int> test2(4,5,6);
tuple<int, int, int> test3(7,8,9);
//拼接
auto new_tup = tuple_cat(test, test2, test3);

交換tuple

tuple<int, int, int> test(1,2,3);
tuple<int, int, int> test2(4,5,6);
//交換
test.swap(test2);

tuple解包

tuple使用tie方法進行解包,tie的參數(shù)個數(shù)與tuple成員個數(shù)一致,否則要用ignore占位

tuple<int,int> test{2,8};
tuple<int,int> test2{2,8,6};
int a, b;
//解包
tie(a, b) = test;
//ignore占位的情況
tie(a, b, ignore) = test2;

tuple比較

當兩個tuple具有相同數(shù)目的成員,且對應成員類型可比較的時候,tuple比較才合法

//有如下四個tuple
tuple<string, string> test{"1","2"};
tuple<int, int, int> test2{ 1,2,3 };
tuple<int,int> test3{1,2};
tuple<int, int> test4{ 4,5 };
test == test2;	//報錯,string與int類型不能比較
test2 < test3;	//報錯,test2與test3成員數(shù)量不同
test3 < test4;	//正確,該語句值為True

tuple遍歷

tuple沒有迭代器,其遍歷非常麻煩,其設計目的也不在于此(如果項目開發(fā)過程中要對某一數(shù)據(jù)結(jié)構(gòu)進行遍歷該數(shù)據(jù)結(jié)構(gòu)應盡量避免為tuple類型,完全可以用list代替)

但此處還是給出遍歷的方法(不推薦使用)

本方法來自C++Tuple元組的詳細用法 - 知乎 (zhihu.com)

#include <iostream>
#include <tuple>
#include <array>
#include <utility>
using namespace std;
template<class Tuple, size_t N>
struct PrintTuple
{
	static void Printf(const Tuple& Value)
	{
		PrintTuple<Tuple, N - 1>::Printf(Value);
		cout << "," << get<N - 1>(Value);
	}
};
template<class Tuple>
struct PrintTuple<Tuple, 1>
{
	static void Printf(const Tuple& Value)
	{
	     cout << get<0>(Value);
	}
};
template<class... Args>
void PrintfMyTuple(const tuple<Args...>& vlaue)
{
      PrintTuple<decltype(vlaue), sizeof...(Args)>::Printf(vlaue);
}
int main()
{
	tuple<int, int, int, int> a(2, 3, 1, 4);
	PrintfMyTuple(a);
	system("pause");

	return 0;
}

tuple開發(fā)時的應用

在項目開發(fā)時,如果我們想讓一個函數(shù)返回多個不同類型的值的話可以使用tuple。

到此這篇關于C++元組tuple類型的文章就介紹到這了,更多相關C++元組tuple類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Qt界面美化之自定義qss樣式表的詳細步驟

    Qt界面美化之自定義qss樣式表的詳細步驟

    很多人應該和我一樣,想做界面才接觸的Qt,結(jié)果就是做不出來華麗的界面,下面這篇文章主要給大家介紹了關于Qt界面美化之自定義qss樣式表的詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 詳解Matlab如何繪制圓角半透明圖例

    詳解Matlab如何繪制圓角半透明圖例

    目前MATLAB的legend圖例是不支持圓角和半透明的,所以本文將自制實現(xiàn)圓角半透明圖例。文中的示例代碼講解詳細,需要的可以參考一下
    2022-05-05
  • C++中構(gòu)造函數(shù)詳解

    C++中構(gòu)造函數(shù)詳解

    大家好,本篇文章主要講的是C++中構(gòu)造函數(shù)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • QT6實現(xiàn)音頻可視化的示例代碼

    QT6實現(xiàn)音頻可視化的示例代碼

    這篇文章主要為大家詳細介紹了一個基于QT6的音頻可視化Demo,文中的示例代碼,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • C++使用CRT庫檢測內(nèi)存泄漏的方法詳解

    C++使用CRT庫檢測內(nèi)存泄漏的方法詳解

    內(nèi)存泄漏是 C/C++ 應用程序中最微妙、最難以發(fā)現(xiàn)的 bug,存泄漏是由于之前分配的內(nèi)存未能正確解除分配而導致的, 內(nèi)存泄漏的檢測工具有很多,CRT庫,是Visual Studio 自帶的,所以我們可以開箱即用,所以下面我們就來一起學習一下如何使用CRT庫檢測內(nèi)存泄漏
    2024-06-06
  • C語言 字符串首字母轉(zhuǎn)換成大寫簡單實例

    C語言 字符串首字母轉(zhuǎn)換成大寫簡單實例

    這篇文章主要介紹了C語言 字符串首字母轉(zhuǎn)換成大寫簡單實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • C++內(nèi)存分區(qū)模型超詳細講解

    C++內(nèi)存分區(qū)模型超詳細講解

    在了解內(nèi)存分區(qū)之前,我們先來聊一聊為什么要進行內(nèi)存分區(qū)。在進行了內(nèi)存分區(qū)之后,在不同的區(qū)域存放的數(shù)據(jù),會有不同的生命周期,從而會讓程序員的編程變得更加靈活
    2022-11-11
  • 詳解C語言中結(jié)構(gòu)體的自引用和相互引用

    詳解C語言中結(jié)構(gòu)體的自引用和相互引用

    這篇文章主要介紹了C語言中結(jié)構(gòu)體的自引用和相互引用,詳細解析了結(jié)構(gòu)體中指針的指向情況,需要的朋友可以參考下
    2016-04-04
  • C語言入門篇--充分理解操作符

    C語言入門篇--充分理解操作符

    本篇文章是基礎篇,適合c語言剛?cè)腴T的朋友,本文主要介紹了c語言的操作符基礎理論,希望可以幫助大家快速入門c語言的世界,更好的理解c語言
    2021-08-08
  • C語言編程函數(shù)指針入門精講教程

    C語言編程函數(shù)指針入門精講教程

    大家在C語言的學習中一定會接觸指針這樣一個東西,而指針也是新手路上一定要消滅的boss,如果以后還要學習Java的同學更是要注重指針的學習,希望能夠有所幫助
    2021-10-10

最新評論

东光县| 筠连县| 天台县| 广水市| 嘉定区| 安多县| 禹州市| 营口市| 高密市| 会理县| 塔河县| 兖州市| 涞水县| 当涂县| 普陀区| 伊春市| 扬中市| 永吉县| 西畴县| 吉木乃县| 晋中市| 伊春市| 奉化市| 全南县| 定西市| 志丹县| 房产| 阿拉善左旗| 惠水县| 元谋县| 北碚区| 九龙城区| 新晃| 铜山县| 上林县| 小金县| 白沙| 大渡口区| 余干县| 阜城县| 榆中县|