我有一个要求,我想查看下一个迭代器位置,看看它是否是容器的结尾。我不能使用std::next
,因为 C++11 还没有被采用。我可以boost::next
用作确切的替代品吗?谢谢
问问题
2404 次
3 回答
1
如果它没有按预期工作,我会感到惊讶。如果有疑问,您可以随时使用std::advance
some_container c;
some_container::iterator it;
std::advance(it, 1);
bool b = it == c.end();
于 2013-07-03T09:16:58.530 回答
0
一般没有。如果您将它用于迭代器(无论如何这是假定的用途),可能是的。
我一般说不的原因是,如果参数类不是迭代器,则在第二个(默认)参数中的std::next
( ) 中存在替换错误。iterator_traits<...>
因此,过去可以使用的东西boost::next
可能std::next
不再适用。
例如,我曾经用于boost::next
不是迭代器但具有operator++
定义的类(但不是二进制 + 运算符)。通常我想生成下一个元素,并且boost::next
非常适合。
struct myint{
int impl;
myint& operator++(){impl++; return *this;}
}
boost::next
适用于此类,但std::next
不适用。因此,我必须坚持制作副本并递增或回退boost::next
(或者更糟糕的iterator_trait
是,为不是迭代器的东西生成一个)。
我的问题std::next
是第二个参数(与 相关difference_type
)对参数施加了不必要的限制。但是我可能是滥用该功能的错误::next
。
于 2013-10-06T09:52:48.823 回答
0
我刚刚将代码库更新为 c++11 和最新的提升。我将 boost::next 更新为 std::next (与您想要的相反)没有负面影响。
所以可能的答案是肯定的。
于 2018-04-20T08:31:47.167 回答