boost::next and std::next equivalent?

boost::next and std::next equivalent?

本文关键字:next equivalent and boost std      更新时间:2023-10-16

我有一个要求,我想窥探下一个迭代器的位置,看看它是否是容器的末尾。我不能使用std::next,因为C++11还没有被采用。我可以使用boost::next作为确切的替代方案吗?感谢

如果它不能按预期工作,我会感到惊讶。如果有疑问,您可以始终使用std::advance

some_container c;
some_container::iterator it;
std::advance(it, 1);
bool b = it == c.end();

一般情况下为否。如果您将它用于迭代器,可能是的(无论如何,这都是假定的用途)。

我之所以说不,通常是因为,如果参数类不是迭代器,那么第二个(默认)参数中的std::nextiterator_traits<...>)中会出现替换错误。因此,以前使用boost::next的东西可能不再使用std::next了。

例如,我曾经对不是迭代器但定义了operator++(但没有定义二进制+运算符)的类使用boost::next。我经常想生成下一个元素,而boost::next非常适合。

struct myint{
  int impl;
  myint& operator++(){impl++; return *this;}
}

boost::next可以使用这个类,但std::next不能。因此,我必须坚持复制并递增或回退到boost::next(或者最坏的情况是,为不是迭代器的东西生成iterator_trait)。

我对std::next的问题是,第二个自变量(与difference_type有关)对自变量施加了不必要的限制。但我滥用函数::next可能是错的。

我刚刚将代码库更新为c++11和最新的boost。我将boost::next更新为std::next(与你想要的相反),没有负面影响。

所以可能的答案是肯定的。