当前位置:首页 » 《关注互联网》 » 正文

C++中的模板类pair

14 人参与  2024年10月16日 10:00  分类 : 《关注互联网》  评论

点击全文阅读


目录

一、成员函数

一、构造函数

二、赋值运算符重载 operator=

三、交换函数 swap

二、非成员函数重载

一、关系运算符重载

二、交换函数 swap

三、获取数据 get 

三、See also

一、无需写类型创建pair对象 make_pair


pair是一个模板类,可以存储两个值的有序对。通常用于需要返回两个值的函数,或者作为容器(如std::map、std::set)的元素。

pair包含在头文件<utility>中

template<class T1, class T2>

struct pair {......}

一、成员函数

一、构造函数

default (1)
pair();
copy (2)
template<class U, class V> pair (const pair<U,V>& pr);
initialization (3)
pair (const first_type& a, const second_type& b);

1.默认构造 pair ()

2.拷贝构造 template<class U, class V>

                   pair (const pair<U, V>& pr)

3.有参构造 pair (const first_type& a, const second_type& b)

pair<int, int> pr1;//默认构造pair<int, int> pr2(10, 20);//有参构造pair<int, int> pr3(pr2);//拷贝构造

二、赋值运算符重载 operator=

copy (1)
pair& operator= (const pair& pr);

1.pair& operator= (const pair& pr)

pair<int, int> pr1(10, 20);pair<int, int> pr2;pr2 = pr1;//赋值运算符重载

三、交换函数 swap

void swap (pair& pr) noexcept   

noexcept关键字是用于指示函数是否抛出异常。如果一个函数使用noexcept关键字声明,并在运行时抛出异常,程序会立即终止。

pair<int, char> pr1(10, 'a');pair<int, char> pr2(20, 'b');pr1.swap(pr2);

二、非成员函数重载

一、关系运算符重载

(1)
template <class T1, class T2>  bool operator== (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs);
(2)
template <class T1, class T2>  bool operator!= (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs);
(3)
template <class T1, class T2>  bool operator<  (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs);
(4)
template <class T1, class T2>  bool operator<= (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs);
(5)
template <class T1, class T2>  bool operator>  (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs);
(6)
template <class T1, class T2>  bool operator>= (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs);

二、交换函数 swap

template <class T1, class T2>

void swap (pair<T1, T2>& x, pair<T1, T2>& y) noexcept

pair<int, char> pr1(10, 'a');pair<int, char> pr2(20, 'b');swap(pr1, pr2);

三、获取数据 get 

lvalue (1)
template <size_t I, class T1, class T2>  typename tuple_element< I, pair<T1,T2> >::type&  get (pair<T1,T2>&  pr) noexcept;
rvalue (2)
template <size_t I, class T1, class T2>  typename tuple_element< I, pair<T1,T2> >::type&& get (pair<T1,T2>&& pr) noexcept;
const (3)
template <size_t I, class T1, class T2>  const typename tuple_element< I, pair<T1,T2> >::type&    get (const pair<T1,T2>& pr) noexcept;

size_t I 值为0或1,如果I值为0,返回成员first的引用;如果I值为1,返回成员second的引用

pair<int, char> pr1(10, 'a');get<0>(pr1) = 100;//将pr1的第一个成员修改为100cout << get<0>(pr1) << endl;//100

三、See also

一、无需写类型创建pair对象 make_pair

template <class T1, class T2>

pair<T1, T2> make_pair (T1 x, T2 y)

当需要传入一个pair对象的参数时,使用make_pair会很方便

void func(pair<int, char> pr){    cout << pr.first << " " << pr.second << endl;}void test(){    func(make_pair(10, 'a'));}pair<int, char> pr1;pr1 = make_pair(20, 'b');

点击全文阅读


本文链接:http://zhangshiyu.com/post/172437.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1