我的C++实用程序使用笔记。
实用程序
使用时需要包含头文件:
#include <utility>
二元组pair
二元关联容器的元素类型是键类型和附加数据类型的组合,这种组合类型可以用一个二元组来表示。
二元组实现
template <class T1, class T2>
struct pair {
T1 first; // 二元组的第一元
T2 second; // 二元组的第二元
pair(); // 默认构造函数
pair(const T1& x, const T2& y); // 构造first = x,second = y的二元组
template <class U, class V> pair(const pair<U, V>& p); // 拷贝构造函数
template <class U, class V> pair(pair<U, V>&& p); // 移动构造函数,&&表示右值引用,C++11引入
template <class U, class V> pair(U&& x, V&& y); // 使用右值引用参数,创建pair对象,C++11引入
}
二元组辅助构造函数make_pair()
原型声明:
// C++98/03
template <class T1, class T2>
pair<T1, T2> make_pair(T1 x, T2 y);
// C++11
template <class T1, class T2>
pair<V1, V2> make_pair(T1&& x, T2&& y);
实现:
// C++98/03
template <class T1, class T2>
pair<T1, T2> make_pair(T1 x, T2 y) {
return (pair<T1, T2>(x, y));
}
// C++11
template <class T1, class T2>
pair<T1, T2> make_pair(T1 x, T2 y) {
return (pair<V1, V2>(forward<T1>(x), forward<T2>(y)));
}
完美转发函数forward()
原型声明:
template <class T>
T&& forward(typename remove_reference<T>::type& arg) noexcept;
template <class T>
T&& forward(typename remove_reference<T>::type&& arg) noexcept;
强制转换函数move()
原型声明:
template <class T>
typename remove_reference<T>::type&& move(T&& arg) noexcept;