我有一个要求,我想查看下一个迭代器位置,看看它是否是容器的结尾。我不能使用std::next
,因为C ++ 11尚未被采用。我可以使用boost::next
作为确切的替代方案吗?感谢
答案 0 :(得分:1)
如果它不能按预期工作,我会感到惊讶。如果有疑问,您可以随时使用std::advance
some_container c;
some_container::iterator it;
std::advance(it, 1);
bool b = it == c.end();
答案 1 :(得分: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
可能是错误的。
答案 2 :(得分:0)
我刚刚将代码库更新为c ++ 11和最新版本。我更新了boost :: next到std :: next(与你想要的相反),没有任何负面影响。
所以可能的答案是肯定的。