我有一个需求,我想窥视下一个迭代器的位置,看看它是否是容器的末尾。我不能使用std::next,因为C++11还没有被采用。我可以使用boost::next作为确切的替代方案吗?谢谢
发布于 2013-07-03 17:16:59
如果它没有像预期的那样工作,我会感到惊讶。如果有疑问,您可以随时使用std::advance
some_container c;
some_container::iterator it;
std::advance(it, 1);
bool b = it == c.end();发布于 2013-10-06 17:52:49
大体上不是。如果您将其用于迭代器,则可能是这样的(这是假定的用法)。
我通常说不是的原因是,如果参数类不是迭代器,则第二个(默认)参数的std::next (iterator_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函数的人。
发布于 2018-04-20 16:31:47
我刚刚将代码库更新为c++11和最新的boost。我更新了std::next旁边的boost::(与你想要的相反),没有负面影响。
因此,可能的答案是肯定的。
https://stackoverflow.com/questions/17444038
复制相似问题