【问题标题】:accessing members of boost:: tuple访问 boost:: tuple 的成员
【发布时间】:2011-06-01 11:43:13
【问题描述】:

我正在尝试实现一个向量,如 vector >day;我想访问元组的第一个元素来检查条件。 有人可以告诉我该怎么做吗?我是新手。 提前致谢。

【问题讨论】:

    标签: c++ boost


    【解决方案1】:
    #include <boost/tuple/tuple.hpp>
    #include <iostream>
    #include <vector>
    
    int main()
    {
        std::vector< boost::tuple<int, int, int> > v;
        v.push_back(boost::make_tuple(1, 2, 3));
        std::cout << boost::get<0>(v[0]) << std::endl;
        std::cout << boost::get<1>(v[0]) << std::endl;
        std::cout << boost::get<2>(v[0]) << std::endl;
    }
    

    【讨论】:

    • 如果我不使用这个make_tuple(),我可以使用get()
    • @Shweta: 是的,make_tuple 只是创建元组的辅助函数。
    • 您的方法出现了一些错误,可能是版本问题还是其他问题。错误是错误:'boost::get' 不是 'boost::tuples::tuple'
    • @Shweta 然后将v[0].get&lt;n&gt;() 替换为boost::get&lt;n&gt;(v[0])
    • thanxd 它工作了,但为什么它不能以以前的方式工作。有什么区别?
    【解决方案2】:

    第一个元组有一组类型:
    编辑(修正了你的帖子)但在这里使用抽象类型来演示它如何更好地工作。

    std::vector<boost::tuple<A, B, C> >   day;
    
    // Load data into day;
    

    现在您可以使用 get 方法提取元组的那部分。

    A&   aPart = day[0].get<0>();
    B&   bPart = day[0].get<1>();
    C&   cPart = day[0].get<2>();
    

    【讨论】:

    • 不应该是get&lt;0&gt;,get&lt;1&gt;,get&lt;2&gt;吗?
    • 有没有人看到访问无效索引时产生的错误信息?此外,缺少 VS 的可视化工具让我望而却步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多