首页 > 其他分享 >pair类

pair类

时间:2024-04-22 16:24:24浏览次数:32  
标签:调用 对象 C++ pair 模板 构造函数

C++ STL标准库提供了 pair 类模板,其专门用来将 2 个普通元素 first 和 second(可以是 C++ 基本数据类型、结构体、类自定的类型)创建成一个新元素<first, second>

pair 类模板定义在<utility>头文件中,所以在使用该类模板之前,需引入此头文件。另外值得一提的是,在 C++ 11 标准之前,pair 类模板中提供了以下 3 种构造函数:

// 默认构造函数,即创建空的 pair 对象
pair();
// 直接使用 2 个元素初始化成 pair 对象
pair (const first_type& a, const second_type& b);
// 拷贝(复制)构造函数,即借助另一个 pair 对象,创建新的 pair 对象
template<class U, class V> pair (const pair<U,V>& pr);

在 C++ 11 标准中,在引入右值引用的基础上,pair 类模板中又增添了如下 2 个构造函数:

// 移动构造函数
template<class U, class V> pair (pair<U,V>&& pr);
// 使用右值引用参数,创建 pair 对象
template<class U, class V> pair (U&& a, V&& b);

下面程序演示了以上几种创建 pair 对象的方法:

#include <iostream>
#include <utility>      // pair
#include <string>       // string
using namespace std;
int main() {
    // 调用构造函数 1,也就是默认构造函数
    pair <string, double> pair1;
    // 调用第 2 种构造函数
    pair <string, string> pair2("STL教程","http://c.biancheng.net/stl/");  
    // 调用拷贝构造函数
    pair <string, string> pair3(pair2);
    //调用移动构造函数
    pair <string, string> pair4(make_pair("C++教程", "http://c.biancheng.net/cplus/"));
    // 调用第 5 种构造函数
    pair <string, string> pair5(string("Python教程"), string("http://c.biancheng.net/python/"));  
   
    cout << "pair1: " << pair1.first << " " << pair1.second << endl;
    cout << "pair2: "<< pair2.first << " " << pair2.second << endl;
    cout << "pair3: " << pair3.first << " " << pair3.second << endl;
    cout << "pair4: " << pair4.first << " " << pair4.second << endl;
    cout << "pair5: " << pair5.first << " " << pair5.second << endl;
    return 0;
}

上面程序在创建 pair4 对象时,调用了 make_pair() 函数,它也是 <utility> 头文件提供的,其功能是生成一个 pair 对象。因此,当我们将 make_pair() 函数的返回值(是一个临时对象)作为参数传递给 pair() 构造函数时,其调用的是移动构造函数,而不是拷贝构造函数。

在上面程序的基础上,C++ 11 还允许我们手动为 pair1 对象赋值,比如:

pair1.first = "Java教程";
pair1.second = "http://c.biancheng.net/java/";
cout << "new pair1: " << pair1.first << " " << pair1.second << endl;

 

标签:调用,对象,C++,pair,模板,构造函数
From: https://www.cnblogs.com/love-9/p/18150836

相关文章

  • 52 Things: Number 50: What is the BLS pairing-based signature scheme?
    52Things,Number50:WhatistheBLSpairing-basedsignaturescheme?52件事,第50号:什么是基于BLS配对的签名方案? ThisweekwelookatwhattheBLSpairing-basedsignatureschemeis.See here forfulldetails.本周我们来看看什么是基于BLS配对的签名方案。请参......
  • 52 Things: Number 14: What is a cryptographic pairing?
    52Things:Number14:Whatisacryptographicpairing?52件事:第14条:什么是密码配对? Thisisthelatestinaseriesofblogpoststoaddressthelistof '52ThingsEveryPhDStudentShouldKnow'todoCryptography:asetofquestionscompiledtogivePhD......
  • E. Vlad and a Pair of Numbers
    题解首先,我们知道异或运算是无进位相加,那么a^b=x我们不妨先让a=x,b=0;而a,b其余二进制位上要么同为0,要么同为1。接下来,根据题意a+b=2x,我们可知我们同时为a,b加上x/2。此时再判断a^b是否等于x即可。code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intma......
  • C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair
    C++Primer(第5版)练习11.14练习11.14扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >Fil......
  • 数据结构之结构体进阶——pair
    前言:当结构体中只有两个元素时,去定义结构体时太过于繁琐了,在C++中有特定的函数可以简化这种结构体的定义。 pair的定义:有两个元素的结构体,其中为first,second元素,其中first,second的类型可以自己定义。 pair的创建:文字解释:官方给予的定义:template<classT1,class......
  • Vim插件之auto-pairs
     本文结构:a、简介b、安装auto-pairsc、使用d、注意事项a、jiangmiao/auto-pairs:这个插件可以自动补全括号、引号等符号,提高编程效率。要安装和使用插件,通常需要一个插件管理器,如Vundle或Volt。这些管理器可以帮助你方便地安装、更新和卸载插件。安装插件后,你可能还需要在......
  • MogDB备机处于standby need-repair(WAL)状态
    MogDB备机处于standbyneed-repair(WAL)状态本文出处:https://www.modb.pro/db/402820问题现象Mogdb主备环境,备机检查发现StandbyNeedrepair(WAL)故障。原因分析因网络故障、磁盘满等原因造成主备实例连接断开,主备日志不同步,导致数据库集群在启动时异常。处理分析通过......
  • 【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势
     5.命令 本部分描述了LAMMPS输入脚本的格式以及其中的命令如何用于定义LAMMPS模拟。主要包括以下内容。5.1.LAMMPS输入脚本5.2.输入脚本的解析规则5.3.输入脚本结构5.4.按类别划分的命令5.5.通用命令5.6.Fix命令5.7.compute命令5.8.Pair_style势所有LAMMP......
  • 《Distributed_Storage_Codes_With_Repair-by-Transfer_and_Nonachievability_of_Inte
    论文5个部分,本篇主要是针对3-14日组会中,懂和不懂的地方进行记录。论文部分:①RAID(待补充)②DC(datacollector)数据收集器+重建节点所有的这些系统,最基本的是要保证“DC”功能,也就是数据收集;在这个基础上,再保证,假如某节点出问题,能否修复;再研究,怎么修复代价最小,代价又分很多,有修......
  • [Dubbo] Dubbo 反序列化将Pair转化成HashMap的问题
    问题描述Dubbo在3.2.x版本中,类检查级别默认是STRICT3.1版本中默认为WARN告警级别,3.2版本中默认为STRICT严格检查级别。不配置的情况下,会将名单以外的类型转化成Map。如何支持Pair的序列化和反序列化dubbo.application.serialize-check-status=WARN新建允许的名......