色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++ std::tie函數的作用和用法

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 17:28 ? 次閱讀

函數原型

C++中std::tie函數的作用就是從元素引用中生成一個tuple元組,其在頭文件中定義,其函數原型如下:

template< class... Types >
std::tuple< Types&... > tie( Types&... args ) noexcept; //C++11起, C++14前

template< class... Types >
constexpr std::tuple< Types&... > tie( Types&... args ) noexcept;//C++14起

其中參數 args 為構造 tuple 所用的零或更多左值參數。其返回值為含的std::tuple對象。

作用和用法

1. 解包 tuple 和 pair

std::tie 可以用于解包 tuple 和 pair,因為 std::tuple 擁有從 pair 的轉換賦值。

注:元組tuple可以將不同類型的元素存放在一起,可以理解為pair的擴展(pair只能包含兩個元素,而tuple可以多個)。

std::tuple擁有從 pair 的轉換賦值的主要原因就是:tuple的實現中重載了 operator=,其部分原型如下:

template< class U1, class U2 >
tuple& operator=( const std::pair< U1, U2 >& p );//C++11 起, C++20 前

因此,std::tie可以用于pair的解包:

std::set< int > set;
std::set< int >::iterator iter;
bool result;
std::tie(iter, result) = set.insert(value);//解包 insert 的返回值為 iter 與 result
std::tie(std::ignore, result) = set.insert(value);//使用std::ignore忽略insert的返回pair中的第一個元素

:std::ignore 是令 std::tie 在解包 std::tuple 時作為不使用的參數的占位符使用,即忽略某些 tuple 中的某些返回值。

2. 批量賦值

std::tie 可以將多個變量的引用整合成一個 tuple,進而通過另外一個同類型的 tuple 進行批量賦值。

tuple< string, double, int > tup("idoit", 98.8, 1);
string name;
double score;
int rank;

//通過變量tup實現對name、score、rank的批量賦值操作
tie(name, score, rank) = tup;

3. 比較結構體

可以將結構體成員傳入std::tie,從而實現結構體的比較。

struct S {
    int n;
    std::string s;
    float d;
    bool operator< (const S& rhs) const
    {
        // 比較 n 與 rhs.n,
        // 然后為 s 與 rhs.s,
        // 然后為 d 與 rhs.d
        return std::tie(n, s, d) < std::tie(rhs.n, rhs.s, rhs.d);
        //注:由于tie返回的是一個 tuple,tuple的實現已經重載了operator< ,因此可以利用tuple的operator< ,進而實現結構體S的operator< 。
    }
};

具體示例

#include < iostream >
#include < set >
#include < string >
#include < tuple >
using namespace std;

struct S {
    int n;
    string s;
    float d;
    bool operator< (const S& rhs) const {
        // 比較 n 與 rhs.n,
        // 然后為 s 與 rhs.s,
        // 然后為 d 與 rhs.d
        return tie(n, s, d) < tie(rhs.n, rhs.s, rhs.d);
    }
};

int main() {
    set< S > set_of_s;

    S value1{42, "Test1", 3.14};
    S value2{23, "Test2", 3.14};
    set< S >::iterator iter;
    bool result;

    /************解包**********/
    tie(iter, result) = set_of_s.insert(value1);
    if (result) cout < < "Value1 was inserted successfullyn";

    tie(std::ignore, result) = set_of_s.insert(
        value2);  // 使用std::ignore忽略insert的返回pair中的第一個元素
    if (result) cout < < "Value2 was inserted successfullyn";

    /***********結構體比較**********/
    bool r = value1 < value2;
    cout < < "value1 < value2 : " < < r < < endl;

    /***********批量賦值**********/
    tuple< string, double, int > tup("idoit", 98.8, 1);
    string name;
    double score;
    int rank;

    tie(name, score, rank) = tup;
    cout < < name < < " " < < score < < " " < < rank < < endl;

    return 0;
}

輸出結果:

Value1 was inserted successfully
Value2 was inserted successfully
value1 < value2 : 0
idoit 98.8 1
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 轉換器
    +關注

    關注

    27

    文章

    8728

    瀏覽量

    147437
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7008
收藏 人收藏

    評論

    相關推薦

    C++函數virtual詳解

    C++ 中的虛函數用于解決動態多態問題,虛函數作用是允許在派生類中重新定義與積累同名的函數,并且可以通過基類指針或引用來訪問基類和派生類中
    發表于 09-07 11:27 ?2903次閱讀

    c++中冒號(:)和雙冒號(::)的用法

    ()——————————————————————————————————————VC中如下::是C++里的“作用域分解運算符”。比如聲明了一個類A,類A里聲明了一個成員函數voidf(),但沒有在類的聲明里給出f的定義,那么在類
    發表于 10-18 10:08

    C/C++回調函數

    C/C++回調函數首先看一下回調函數的官方解釋:回調函數就是一個通過函數指針調用的
    發表于 02-11 15:25

    嵌入式-C++函數的重載

    一、什么是函數的重載 兩個以上的函數,具有相同的函數名,通過參數的類型和參數的個數不同。編譯器自行匹配,自動確定調用哪一個函數 二、函數重載
    發表于 06-28 13:54

    如何在中斷C函數中調用C++

    之前,我們在單片機程序開發時都會面對中斷函數。眾所周知的,這個中斷函數肯定是要用C函數來定義的。我在用C++進行程序開發的時候就發現了一個需
    發表于 05-09 18:17 ?0次下載
    如何在中斷<b class='flag-5'>C</b><b class='flag-5'>函數</b>中調用<b class='flag-5'>C++</b>

    C語言和C++的特點與用法詳細說明

    本文檔的主要內容詳細介紹的是C語言和C++的特點與用法詳細說明。
    的頭像 發表于 12-26 10:58 ?4437次閱讀

    EE-128:C++中的DSP:從C++調用匯編類成員函數

    EE-128:C++中的DSP:從C++調用匯編類成員函數
    發表于 04-16 17:04 ?2次下載
    EE-128:<b class='flag-5'>C++</b>中的DSP:從<b class='flag-5'>C++</b>調用匯編類成員<b class='flag-5'>函數</b>

    C++中如何用虛函數實現多態

    01 — C++函數探索 C++是一門面向對象語言,在C++里運行時多態是由虛函數和純虛函數
    的頭像 發表于 09-29 14:18 ?1712次閱讀

    C++ C語言函數查詢電子版下載

    C++ C語言函數查詢電子版下載
    發表于 01-18 10:15 ?0次下載

    深度解析C++中的虛函數

    函數作為C++的重要特性,讓人又愛又怕,愛它功能強大,但又怕駕馭不好,讓它反咬一口,今天我們用CPU的角度,撕掉語法的偽裝,重新認識一下虛函數。 虛函數
    的頭像 發表于 02-15 11:14 ?848次閱讀
    深度解析<b class='flag-5'>C++</b>中的虛<b class='flag-5'>函數</b>

    C++中有函數指針還需要std::function嘛

    C/C++中可以使用指針指向一段代碼,這個指針就叫函數指針,假設有這樣一段代碼:
    的頭像 發表于 02-15 14:13 ?520次閱讀
    <b class='flag-5'>C++</b>中有<b class='flag-5'>函數</b>指針還需要<b class='flag-5'>std</b>::function嘛

    C++基礎知識之函數1

    函數C++ 中的一個重要概念,它可以讓我們將一段代碼封裝起來,然后在需要的時候調用它。C++ 中的函數有以下幾個特點: * 函數
    的頭像 發表于 04-03 10:34 ?587次閱讀

    ?數組和C++ std::array詳解

    std::array是C++容器庫提供的一個固定大小數組的容器。其與內置的數組相比,是一種更安全、更容易使用的數組類型。
    的頭像 發表于 07-19 11:02 ?1129次閱讀
    ?數組和<b class='flag-5'>C++</b> <b class='flag-5'>std</b>::array詳解

    動態數組和C++ std::vector詳解

    std::vector是C++的默認動態數組,其與array最大的區別在于vector的數組是動態的,即其大小可以在運行時更改。std::vector是封裝動態數組的順序容器,且該容器中元素的存取是連續的。
    的頭像 發表于 07-19 11:07 ?983次閱讀

    ostream在c++中的用法

    ostream 是 C++ 標準庫中一個非常重要的類,它位于 頭文件中(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 類及其派生類(如 std::cout
    的頭像 發表于 09-20 15:11 ?786次閱讀
    主站蜘蛛池模板: 嫩交18xxxx| 在线高清无码欧美久章草| 国产精品禁18久久久夂久| 永久免费无码AV国产网站| 色琪琪无码成人AV视频| 久久久久999| 超碰97 总站 中文字幕| 神马影院午夜伦理限级| 我要干av| 国产精品美女WWW爽爽爽视频| 亚洲国产高清视频在线观看| 男人J桶进男人屁股过程| 国产网址在线观看| 丰满大爆乳波霸奶| 中文字幕按摩| 亚洲精品久久无码AV片WWW| 欧美一区二区三区激情视频| 久久久乱码精品亚洲日韩| 国产美熟女乱又伦AV| 潮 喷女王cytherea| 91偷偷久久做嫩草电影院| 亚洲三级精品| 小SAO货边洗澡边CAO你动漫| 日本免费无码A专区在线观看| 蜜桃AV色欲A片精品一区| 99精品视频在线观看re| 亚洲三级在线视频| 午夜色网站| 色久久久综合88一本道| 欧美另类jizzhd| 免费毛片播放| 六级黄色片| 欲插爽乱浪伦骨| 精品国产美女AV久久久久| 国产成人在线免费观看| 97午夜精品| 中文字幕亚洲男人的天堂网络| 宝贝乖女好紧好深好爽老师| 欧美嫩freexxxhddvd| 空姐厕所啪啪啪| 久久www99re在线播放|