首页 > 编程语言 >C++(std::pair)

C++(std::pair)

时间:2023-12-19 15:14:31浏览次数:38  
标签:std C++ element pair 模板 构造函数

在C++中,std::pair是一个标准库模板,用于将两个不同类型的值组合成一个单元,即一对(pair)。std::pair定义在头文件 <utility> 中。这个模板是为了提供一种简单的方式来存储和传递两个相关但不同类型的值。

std::pair模板的定义如下:

namespace std {
    template <class T1, class T2>
    struct pair {
        T1 first;   // 第一个元素
        T2 second;  // 第二个元素

        // 构造函数
        pair();
        pair(const T1& x, const T2& y);
        template<class U1, class U2>
        pair(const pair<U1, U2>& p);
    };
}

std::pair有两个公共成员:firstsecond,它们分别表示一对值的第一个和第二个元素。以下是std::pair的一些重要特性和使用方式:

  1. 构造函数:

    • 默认构造函数:创建一个空的pair对象。
    • 带参数的构造函数:接受两个参数,分别用于初始化firstsecond
  2. 成员函数:

    • make_pair:静态成员函数,用于创建一个pair对象。
    • operator==operator!=:用于比较两个pair对象的相等性和不相等性。
  3. 使用示例:

    #include <iostream>
    #include <utility>
    
    int main() {
        // 创建pair对象并初始化
        std::pair<int, double> myPair(1, 3.14);
    
        // 访问pair的成员
        std::cout << "First element: " << myPair.first << std::endl;
        std::cout << "Second element: " << myPair.second << std::endl;
    
        // 使用make_pair创建pair对象
        auto anotherPair = std::make_pair("Hello", 42);
        std::cout << "First element: " << anotherPair.first << std::endl;
        std::cout << "Second element: " << anotherPair.second << std::endl;
    
        return 0;
    }
    
    First element: 1
    Second element: 3.14
    First element: Hello
    Second element: 42
    

    在上面的示例中,std::pair的对象可以包含不同类型的元素,例如<int, double><const char*, int>

  4. 注意事项:

    • std::pair是一个通用的模板,可以用于存储任意两个类型的值,但通常用于将两个相关但不同类型的值组合在一起。
    • C++11引入了std::make_pair,它是一个方便的函数模板,用于创建pair对象,可以自动推导模板参数类型。

总体而言,std::pair是C++中一个非常有用的工具,特别适合在需要表示和操作两个相关但不同类型的值时使用。



标签:std,C++,element,pair,模板,构造函数
From: https://www.cnblogs.com/keye/p/17913757.html

相关文章

  • C++(深拷贝、潜拷贝)
    在C++中,深拷贝(deepcopy)和浅拷贝(shallowcopy)是涉及对象复制的两个概念,特别是当涉及到类或结构体时。下面我将解释这两个概念:1.浅拷贝(ShallowCopy):浅拷贝是指将一个对象的内容复制到另一个对象,但如果对象中包含指针,则只会复制指针的值,而不是指针所指向的数据。这意味着两个对象......
  • C++(STL标准库)
    C++标准模板库(StandardTemplateLibrary,STL)是C++标准库的一部分,提供了一组通用的模板类和函数,包括数据结构和算法,以便开发者能够更容易地实现各种功能。STL的设计目标是提供高性能、灵活和通用的工具,使得开发者能够专注于问题的解决,而不必为数据结构和算法的实现而费心。STL......
  • 刘方舟 VC++面向对象与可视化程序设计 黄维通
    注:由于题目不确定,整理知识点范围比较宽,适当选取1.内联函数     定义:定义在类体内的成员函数,即函数的函数体放在类体内     特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题。一定要在调用之前定义,并且内联函数无法递归调用。2.构造函数与析构......
  • C++U3-第05课-C++语言阶段复习
    复习学习目标 输入输出 分支结构 多分支和switch语句 循环语句 练习1 一维数组  练习 二维数组  字符数组字符串 函数  sort排序  结构体 成绩排序 【题意分析】根据成绩从高到低排序,同成绩学号小的排在前面的顺序进......
  • C++移动构造与std::move()
    背景及问题如下程序所示:#include<iostream>classMyString{public: MyString()=default; MyString(constchar*data) { printf("%s","MyStringConstructed!!\n"); size=strlen(data); m_data=newchar[size]; memcpy(m_data,......
  • C++ 反向遍历 array 小记
    有时候需要逆向循环,例如从字符串的最右端遍历到最左端,需要注意一些细节!初学遇到一些bug记录在这里。首先arr.size()的数据类型为size_t,为无符号整型对于for(intidx=arr.size()-1;idx>=0;idx--):使用int作为idx的类型,有一定概率会编译失败,因为size_t的具......
  • C++U4-第09课-STL容器
    学习目标 STL  栈stack [入栈出栈] 【算法分析】栈的基本操作。【参考代码】#include<bits/stdc++.h>usingnamespacestd;intmain(){stack<int>st;intn;cin>>n;for(inti=1;i<=n;i++){intx;cin......
  • 【面试官版】【持续更新中】融合滤波算法+数据结构+激光视觉SLAM+C++面试题汇总
    C++部分什么时候需要写虚函数、什么时候需要写纯虚函数?只继承接口为纯虚函数强调覆盖父类重写,或者父类也需要实现一定的功能,为虚函数指针传参和引用传参区别?引用传参本质上是传递原参数地址,指针传参本质还是值传递,生成拷贝指针,拷贝指针和原指针指向的为同一块内存。因此改变......
  • 【我们尽量少说废话的讲完】C++红黑树原理
    红黑树的出现红黑树增删改查的时间复杂度都是O(logn)。如果插入的数据随机,那么使用二叉搜索树即可保证树接近平衡。此时增删改查的效率都为O(logN)。但如果插入的数据为有序的,此时二叉搜索树极其不平衡,退化为链表,时间复杂度降为O(N)。而红黑树就是为了应对这种极端情况。红黑......
  • 【纯代码复制粘贴即可使用】卡尔曼滤波的C++实现
    使用Eigen实现卡尔曼滤波。如果实现扩展卡尔曼滤波只需将H矩阵换成雅可比的求解。#ifndef_MYKALMAN_H#define_MYKALMAN_H#include<Eigen\Dense>classKalmanFilter{public:KalmanFilter(intstateSize,intmeasSize,intuSize);~KalmanFilter()=default;......