提升两个不同列表大小的zip迭代器

时间:2016-04-11 18:43:45

标签: c++ boost iterator

我使用了boost zip迭代器用于相同大小的列表,不小心我已经通过了不同的大小列表来迭代。我们可以将boost zip迭代器用于两种不同的大小,如果不是那么在boost或c ++中有任何其他选择吗?

1 个答案:

答案 0 :(得分:0)

根据source code,我们可以确定以下事实。

  1. 比较:
  2.   

    如果迭代器元组中的所有迭代器都相等,则两个zip迭代器是相等的。

    1. 推进:
    2.   

      推进zip迭代器意味着推进迭代器元组中的所有迭代器。

      1. 解引用:
      2.   

        Dereferencing返回一个由迭代器元组中的解引用迭代器构建的元组。

        当您迭代(将您的结束条件与boost::make_zip_iterator(boost::make_tuple(end1, end2))之类的内容进行比较)并达到其中一个列表时,循环将不会终止(参见1),导致无效的解除引用(参见3)

        您应该找到两个列表的公共长度(例如std::min(list1.size(), list2.size())并初始化结束迭代器,以便两个范围的长度相等。