C++标准库之Unities-笔记2

来源:互联网 发布:如何查看网卡mac地址 编辑:程序博客网 时间:2024/05/21 12:25

声明:这个博文所有内容均来自于C++标准库-自学教程与参考手册(第二版)英文版 上册。如果转载,务必附带本声明,请注明出处。
1、pairs
pair是C++里面很好用的,在Qt里经常使用(虽然也有Qt自带的)。
源于C++标准库自学教程与参考手册第二版英文版上册
pair其实很简单,就是将两个元素做成一对,这对于存储两个有关联的数据,是很有意义的。存储的元素类型可以是C++允许的任何类型。

#include <iostream>using std::cout;using std::endl;int main(){    typedef std::pair<int, float> IntFloatPair;    IntFloatPair p(42, 3.141592);    std::cout << std::get<0>(p) << std::endl << std::get<1>(p);  // 42    std::cout << std::tuple_size<IntFloatPair>::value << std::endl;  //3.1415926    //std::cout << std::tuple_element<0, IntFloatPair>::type << std::endl;    auto p2 = std::make_pair(42, '@');    std::cout << p2.first << "\t" << p2.second << std::endl;    std::cout << "p2.second's type:"<< typeid(p2.second).name() << std::endl;    int i = 0;    auto p3 = std::make_pair(std::ref(i), std::ref(i)); //传引用的值    ++p3.first;    std::cout << p3.first << ' ' << std::endl;    ++p3.second;    std::cout << p3.second << std::endl;    return 0;}

2、tuple

#include <iostream>#include <complex>#include <tuple>#include <string>int main(){    std::tuple<std::string, int, int, std::complex<double>> t;    std::tuple<int, float, std::string> t1(41, 6.3, "nico");    std::cout << std::get<0>(t1) << " "        << std::get<1>(t1) << " "        << std::get<2>(t1) << std::endl;    auto t2 = std::make_tuple(22, 44, "nico");    std::get<1>(t1) = std::get<1>(t2);    std::cout << std::get<1>(t1) << std::endl;}

可以看到std::make_tuple虽然能比较方便的创建一个tuple,但是它创建的内部元素类型不见得是你想要的,它是通过推导得到的类型。最好还是显示地指定。
还有一个就是std::tie(),这个函数直接能够创建一个引用。

std::tie(std::get<0>(t), std::get<1>(t), std::get<2>(t)) = t1;//将t1的值分别传递给t的前三个    std::cout << std::get<0>(t) << " "        << std::get<1>(t) << " "        << std::get<2>(t) << std::endl;

其他特性:

int main(){    auto mytuple = std::make_tuple(10, 'a');    std::tuple_element<0, decltype(mytuple)>::type first = std::get<0>(mytuple);    std::tuple_element<1, decltype(mytuple)>::type second = std::get<1>(mytuple);    std::cout << "mytuple contains: " << first << " and " << second << '\n';    int n = 0;    auto t = std::tuple_cat(std::make_tuple(42, 7.7, "hello"), std::tie(n));    std::cout << std::get<3>(t) << std::endl;    std::tuple < int, float, std::string > t2(77, 1.1, "more light");    //std::cout << t2 << std::endl;  //编译不能通过, VS2013    return 0;}
0 0
原创粉丝点击