zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    MyBatis参数传入集合之foreach动态sql
    【mybatis】多次查询缓存的问题
    svn is already locked解决方案
    Python 命令行之旅:使用 docopt 实现 git 命令
    Django 官方推荐的姿势:类视图
    这可能就是你苦苦寻找免费、高颜值、功能强大的 Markdown 编辑器(共5款)
    超级好用的 Java 数据可视化库:Tablesaw
    让你如“老”绅士般编写 Python 命令行工具的开源项目:docopt
    开发 Django 博客文章阅读量统计功能
    使用 Docker 让部署 Django 项目更加轻松
  • 原文地址:https://www.cnblogs.com/sssblog/p/11057887.html
Copyright © 2011-2022 走看看