pair以模板的方式存储两个数据
namespace std {
template <typename T1, typename T2>
struct pair {
// member
T1 first;
T2 second;
...
};
}
p.first
p.second
get<0>(p) C++11
get<1>(p) C++11
示例 PairPrintTest()
//=======================================
pair接受多个参数
示例 PairTuple()
//========================================
make_pair 中使用ref() 代替参数的引用&
示例 PairRefTest
//=============================================
tie 的用法
示例 TieTest
//=====================================
#include <tuple> #include <iostream> #include <utility> #include <tuple> #include <complex> #include <string> using namespace std; template<typename T1,typename T2> ostream& operator << (ostream& strm, const pair<T1, T2>&p) { return strm << "[" << p.first << "," << p.second << "]"; } void PairPrintTest() { typedef std::pair<int, float> IntFloatPair; IntFloatPair p(42, 3.14f); cout << get<0>(p) << " "<< get<1>(p) << endl; cout << p << endl; } //============================== class Foo { public: Foo(tuple<int, float>) { cout << "Foo::Foo(tuple)" << endl; } template <typename... Args> Foo(Args... args) { cout << "Foo::Foo(args...)" << endl; } }; void PairTupleTest() { tuple<int, float> t(1, 2.22f); // pass the tuple as a whole to the constructor ofFoo: pair<int, Foo> p1(42, t); // pass the elements ofthe tuple to the constructor ofFoo: pair<int, Foo> p2(piecewise_construct, make_tuple(42), t); } void PairRefTest() { int i = 0; auto p = make_pair(&i, &i); ++p.first; ++p.second; cout << "When use '&' i: " << i << endl; auto p1 = make_pair(ref(i), ref(i)); ++p1.first; ++p1.second; cout << "When use 'ref()' i: " << i << endl; } void TieTest() { pair<char, char> p = make_pair('x', 'y'); //pair oftwo chars char c; tie(ignore, c) = p; //extract second value into c (ignore first one) cout << c << endl; tie(c, ignore) = p; cout << c << endl; } void TurpleTest() { int n = 998; auto tt = std::tuple_cat(std::make_tuple(42, 7.7, "hello"), std::tie(n)); } int _tmain(int argc, _TCHAR* argv[]) { PairPrintTest(); PairTupleTest(); PairRefTest(); TieTest(); TurpleTest(); return 0; }