技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性
在前面我介绍过一次tuple,今天在书上也看到了tuple,那就在写一次吧.
tuple(元组),他的内部可以放任意类型的变量(有点类似结构体),前面介绍过它的递归继承,这次直接看基本使用吧
1.创建和取出元素
void testTuple()
{
tuple<string, int, int, complex<double>> t; tuple<int, float, string> t1(, 6.3, "nico"); auto t2 = make_tuple(,,"make_tuple"); //operator=
get<>(t1) = get<>(t2); //取出指定下标元素 get<index>(tuple)
cout << "testTuple operator=: " << get<>(t1) << endl;
}
2.比较大小 : 比较原则为,先比较元素个数,然后按其元素的比较规则比较大小(比较大小的两个tuple,所含元素类型必须相同)
void testTupleCompare()
{
tuple<int, float, string> t1(, 6.3, "nico");
auto t2 = make_tuple(,,"make_tuple");
if(t1 < t2)
cout<< "testTupleCompare t1 < t2" << endl;
else
cout << "testTupleCompare t1 > t2" << endl;
}
3.分割元素 tie()
void testTupleTie()
{
tuple<int, float, string> t1(, 6.3, "nico");
int a;
int b;
string str;
tie(a,b,str) = t1;
cout << "testTupleTie a="<< a << " b=" << b << " str="<< str << endl;
}
4.tuple_size和tuple_element(取出元素类型)
void testTupleSizeAndElement()
{
tuple<int, float, string> t(, 6.2, "nico");
cout << "testTupleSizeAndElement tuple_size = " << (tuple_size<decltype(t)>::value) << endl;//取出tuple元素个数 typedef tuple_element<,decltype(t)>::type T1;;//取出tuple元素类型
typedef tuple_element<,decltype(t)>::type T2;
typedef tuple_element<,decltype(t)>::type T3; cout << "index[0] element: " << typeid(T1).name()<<endl
<< "index[1] element: " << typeid(T2).name()<< endl
<< "index[2] element: " << typeid(T3).name() << endl;
}
5.拼接tuple tuple_cat
void testTupleCat()
{
tuple<int> t1();
auto t2 = make_tuple();
auto t3 = tuple_cat(t1,t2);
cout << __FUNCTION__ << " t3: " << get<>(t3) << " " << get<>(t3) << endl;
}
6.交换函数 swap()
void testTupleSwap()
{
tuple<int> t1();
auto t2 = make_tuple();
t1.swap(t2);
cout << __FUNCTION__ << " t1 " << get<>(t1) << endl;
cout << __FUNCTION__ << " t2 " << get<>(t2) << endl;
}
参考侯捷<<STL源码剖析>>