【问题标题】:boost zip iterator for two different list size两个不同列表大小的 boost zip 迭代器
【发布时间】:2016-08-02 02:09:16
【问题描述】:

我对相同大小的列表使用了 boost zip 迭代器,不小心我传递了不同大小的列表进行迭代。我们可以为两种不同的大小使用 boost zip 迭代器,如果不能,那么在 boost 或 c++ 中还有其他选择吗?

【问题讨论】:

  • 这样的迭代器如果在其中一个序列中遇到 end() 应该是什么行为?

标签: c++ boost iterator


【解决方案1】:

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

  1. 比较:

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

  1. 推进:

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

  1. 取消引用:

解引用返回从迭代器元组中解引用的迭代器构建的元组。


当您迭代(将您作为结束条件与 boost::make_zip_iterator(boost::make_tuple(end1, end2)) 之类的比较)并到达列表之一时,循环不会终止(参见 1),导致无效的取消引用(参见 3)。


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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2020-04-26
  • 2022-11-03
  • 2017-06-18
相关资源
最近更新 更多