首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::next和std::next等价吗?

boost::next和std::next等价吗?
EN

Stack Overflow用户
提问于 2013-07-03 17:12:26
回答 3查看 2.4K关注 0票数 3

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-03 17:16:59

如果它没有像预期的那样工作,我会感到惊讶。如果有疑问,您可以随时使用std::advance

代码语言:javascript
复制
some_container c;
some_container::iterator it;
std::advance(it, 1);
bool b = it == c.end();
票数 1
EN

Stack Overflow用户

发布于 2013-10-06 17:52:49

大体上不是。如果您将其用于迭代器,则可能是这样的(这是假定的用法)。

我通常说不是的原因是,如果参数类不是迭代器,则第二个(默认)参数的std::next (iterator_traits<...>)中存在替换错误。因此,以前在boost::next上工作的东西可能不再在std::next上工作。

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

代码语言:javascript
复制
struct myint{
  int impl;
  myint& operator++(){impl++; return *this;}
}

boost::next可以使用这个类,但是std::next不能,所以我不得不复制并递增,或者退回到boost::next (或者更糟糕的是,为不是迭代器的东西生成一个iterator_trait )。

我对std::next的问题是,第二个参数(与difference_type相关)对参数施加了不必要的限制。但我可能是那个滥用::next函数的人。

票数 0
EN

Stack Overflow用户

发布于 2018-04-20 16:31:47

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

因此,可能的答案是肯定的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17444038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档