• boost tuple


    boost::tuple is a generalized version of std::pair. While std::pair can only store exactly two values, boost::tuple lets you choose how many values to store.

    1. boost::tuple replacing std::pair

    #include <boost/tuple/tuple.hpp>
    #include <boost/tuple/tuple_io.hpp>
    #include <iostream>
    #include <string>
    
    int main() {
      typedef boost::tuple<std::string, int> animal;
    typedef boost::tuple<std::string, int, bool> animal2; animal a(
    "cat", 4);
    animal2 b("cat", 4, true); std::cout
    << a << std::endl;
    std::cout << std::boolalpha << b << std::endl;
    return 0; }

    输出为:

    (cat 4)

    (cat, 4, true)

    2. creating tuples with boost::make_tuple()

    #include <boost/tuple/tuple.hpp>
    #include <boost/tuple/tuple_io.hpp>
    #include <iostream>
    
    int main() {
      std::cout.setf(std::ios::boolalpha);
      std::cout << boost::make_tuple("cat", 4, true) << std::endl;
      return 0;
    }

    boost::make_tuple() works like the helper function std::make_pair() for std::pair

    3. reading and writing elements of a tuple

    #include <boost/tuple/tuple.hpp>
    #include <boost/tuple/tuple_io.hpp>
    #include <string>
    #include <iostream>
    
    int main() {
      typedef boost::tuple<std::string, int, bool> animal;
      animal a = boost::make_tuple("cat", 4, true);
      std::cout << a.get<0>() << std::endl;
      std::cout << boost::get<0>(a) << std::endl;
      a.get<0>() = "dog";
      std::cout << std::boolalpha << a << std::endl;
      return 0;
    }

    输出为:

    cat

    cat

    (dog 4 true)

    There are two ways to access values in a tuple. You can call the member function get(), or you can pass the tuple to the free-standing function boost::get(). In both cases, the index of the corrsponding element in the tuple must be provided as a template parameter. The member function get() and the free-standing function boost::get() both return a reference that allows you to change a value inside a tuple.

    4. creating a tier with boost::tie()

    Boost.Tuple supports a specific form of tuples called tier. Tiers are tuples whose elements are all reference types. They can be constructed with the function boost::tie()

    #include <boost/tuple/tuple.hpp>
    #include <boost/tuple/tuple_io.hpp>
    #include <string>
    #include <iostream>
    
    int main() {
      typedef boost::tuple<std::string&, int&, bool&> animal;
      std::string name = "cat";
      int legs = 4;
      bool tail = true;
      animal a = boost::tie(name, legs, tail);
      name = "dog";
      std::cout << std::boolalpha << a << std::endl;
    
      animal b = boost::make_tuple(boost::ref(name), boost::ref(legs), boost::ref(tail));
      name = "animal";
      std::cout << std::boolalpha << b << std::endl;
      return 0;
    }

    输出为:

    (dog 4 true)

    (animal 4 true)

  • 相关阅读:
    07.数组和方法
    05.运算符
    04.变量和常量
    专访Vue作者尤雨溪:Vue CLI 3.0重构的原因
    深入理解JavaScript的设计模式
    如何用纯 CSS 创作文本滑动特效的 UI 界面
    如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
    如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
    如何用纯 CSS 创作 404 文字变形为 NON 文字的交互特效
    如何用纯 CSS 创作炫酷的同心矩形旋转动画
  • 原文地址:https://www.cnblogs.com/sssblog/p/11057887.html
Copyright © 2020-2023  润新知