c++ pair

devtools/2024/9/24 19:57:46/

C++中的pair是一个模板类,用来存储两个不同类型的对象。它位于<utility>头文件中,并定义在std命名空间中。

pair的定义如下:

template <class T1, class T2>
struct pair {using first_type = T1;using second_type = T2;T1 first;T2 second;// 构造函数constexpr pair();constexpr pair(const T1& x, const T2& y);template<class U1, class U2>constexpr pair(U1&& x, U2&& y);template<class... Args1, class... Args2>constexpr pair(piecewise_construct_t, tuple<Args1...> first_args, tuple<Args2...> second_args);// 拷贝和移动构造函数template<class U1, class U2>constexpr pair(const pair<U1, U2>& other);template<class U1, class U2>constexpr pair(pair<U1, U2>&& other);// 赋值操作符template<class U1, class U2>constexpr pair& operator=(const pair<U1, U2>& other);template<class U1, class U2>constexpr pair& operator=(pair<U1, U2>&& other);constexpr void swap(pair& other) noexcept(noexcept(swap(first, other.first)) && noexcept(swap(second, other.second)));};

pair提供了以下主要功能:

  • firstsecondpair的两个成员变量,用来存储两个不同类型的值。
  • pair的构造函数可以接受两个参数,并根据参数的类型自动推导为firstsecond进行初始化。
  • pair提供了拷贝和移动构造函数,以及赋值操作符,可以方便地进行对象的拷贝、移动和赋值操作。
  • pair的成员变量可以使用std::get函数或者std::tie函数进行访问和解包。
  • pair还提供了swap函数,用来交换两个pair对象的值。

以下是pair的示例用法:

#include <iostream>
#include <utility>int main() {std::pair<int, std::string> p1(1, "one");std::pair<int, std::string> p2 = std::make_pair(2, "two");std::cout << p1.first << " " << p1.second << std::endl;std::cout << p2.first << " " << p2.second << std::endl;p1.second = "updated";std::cout << p1.first << " " << p1.second << std::endl;std::swap(p1, p2);std::cout << p1.first << " " << p1.second << std::endl;std::cout << p2.first << " " << p2.second << std::endl;return 0;
}

输出结果:

1 one
2 two
1 updated
2 updated
1 two

以上示例展示了创建pair对象、访问成员变量、修改成员变量以及交换对象值的操作。

希望以上解释对你有所帮助!如有其他问题,请随时提问。


http://www.ppmy.cn/devtools/116643.html

相关文章

单片机学到什么程度才可以去工作?

说实话&#xff0c;10几年前&#xff0c;我自学单片机转行的时候&#xff0c;也是一头雾水&#xff0c;也是一边苦苦挣扎&#xff0c;一边迷茫的状态。 硬件、软件、编程...样样都需要学&#xff0c;连从哪儿开始都不知道&#xff0c;每次看到那些密密麻麻的电路图和代码&#…

c语言中“函数指针”

变量有地址&#xff0c;数组有地址&#xff0c;那么函数是否有地址呢&#xff1f; 有 int Add(int x,int y){ return xy; } int main() { pritnf("%p\n",&Add); pritnf("%p\n",Add); //&函数名和函数名都是函数的地址&#xff0c;没…

解决 Ubuntu 18.04 下与 TIFFField 和 Anaconda 冲突导致的库加载问题

在 Ubuntu 18.04 系统上&#xff0c;我在安装完ROS后&#xff0c;启动具有 GUI 的软件&#xff08;如 RViz 和 Gazebo&#xff09;时遇到了一个问题&#xff1a;每次尝试启动这些软件时&#xff0c;终端中都会报错&#xff0c;错误信息类似如下&#xff1a; rviz: relocation …

【资源三号卫星】

资源三号卫星 资源三号卫星&#xff08;ZY-3&#xff09;&#xff0c;作为中国第一颗民用高分辨率光学传输型测绘卫星&#xff0c;于2012年1月9日成功发射&#xff0c;正式拉开了我国在高分辨率对地观测领域自主发展的序幕。以下是对资源三号卫星的详细介绍&#xff1a; 基本…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

订单超时取消的11种方式

在电商、支付等系统中&#xff0c;一般都是先创建订单&#xff08;支付单&#xff09;&#xff0c;再给用户一定的时间进行支付&#xff0c;如果没有按时支付的话&#xff0c;就需要把之前的订单&#xff08;支付单&#xff09;取消掉。 这种类似的场景有很多&#xff0c;还有…

深入解析Linux驱动开发中的I2C时序及I2C高频面试题

目录 1 I2C通信协议及关键时序事件 1.1 I2C总线结构 1.2 关键时序事件 1.3 仲裁机制与总线冲突解决 2 Linux内核中的I2C时序处理 2.1 I2C适配器 2.2 I2C算法 2.3 I2C核心组件 3 I2C时序问题的调试与解决方法 3.1 超时机制与唯一地址 4 I2C总线挂死问题分析及解决方法…

一文搞懂C++继承

一文搞懂C继承 1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数4.1 构造函数4.2 拷贝构造4.3 赋值重载4.4 析构函数 5.继承与友元6. 继…