如何在非random_access_iterator中使用difference_type

时间:2017-06-01 17:17:18

标签: c++ iterator

详细说明,如果我不能做任何这个

some_iterator it1, it2;
some_iterator::difference_type d = it2 - it1;
it1 += some_iterator::difference_type(42);

我应该如何使用(以任何有用的方式)difference_type

编辑 @NathanOliver指出,为一对前向迭代器表示的某个范围预先分配足够的空间非常有用。仍在寻找输入/输出迭代器的用途

2 个答案:

答案 0 :(得分:2)

例如,请参阅std::distancestd::advance。仅仅因为你不能算术地减去迭代器,并不意味着它们之间的距离概念不存在。

答案 1 :(得分:0)

输入迭代器的简单示例:

template <class InputIterator>
typename std::iterator_traits<InputIterator>::reference readNthItem(InputIterator it, typename std::iterator_traits<InputIterator>::difference_type n)
{
  std::advance(it, n);
  return *it;
}

通常,跳过正在读取的输入序列(例如流)中的某些项是完全有效的操作,并且您需要某些类型来表示要跳过的步数。 / p>