首页 > 解决方案 > 如何将 boost::combine 限制为两个范围的最小值

问题描述

找到以下作为段错误的来源只花了我大约 4 小时的工作:

#include <boost/range/combine.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <vector>
#include <list>

int main(int, const char*[])
{
    std::vector<int> v;
    std::list<char> l;
    for (int i = 0; i < 5; ++i)
    {
        v.push_back(i);
        l.push_back(static_cast<char>(i) + 'a');
    }

    v.push_back(5);

    int ti;
    char tc;
    BOOST_FOREACH(boost::tie(ti, tc), boost::combine(v, l))
    {
        std::cout << '(' << ti << ',' << tc << ')' << '\n';
    }

    return 0;
}

如果你执行这个例子,你会注意到,只要更长的范围有值,combine 就会愉快地迭代。我在文档中没有看到这一点。

有没有办法将迭代限制在两个范围中的较短者?

标签: c++boost

解决方案


推荐阅读