首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Skip_over()算法

Skip_over()算法
EN

Code Review用户
提问于 2011-08-03 01:37:17
回答 1查看 126关注 0票数 5

我只是好奇普通的人是否明白这一点。

代码语言:javascript
复制
template<typename IteratorType>
inline IteratorType skip_over(
    IteratorType begin,
    IteratorType end,
    typename std::iterator_traits<IteratorType>::value_type skippedCharacter)
{
    typedef typename std::iterator_traits<IteratorType>::value_type value_type;
    return std::find_if(begin, end, 
            std::not1(
                 std::bind2nd(std::equal_to<value_type>(), skippedCharacter)
            )
        );
}
EN

回答 1

Code Review用户

发布于 2011-08-03 02:51:12

几点意见:

  • 算法通常对它们使用的迭代器使用名称firstlast,而不是使用beginend (在通常的用法中,beginend具体指的是限定容器中范围的迭代器)。
  • find_if的使用似乎有点过分:是的,使用标准库算法是好的,但是如果您正在编写自己的算法,那么最好只编写一个循环,特别是如果它使代码更加清晰。
  • 关于模板参数命名,如果您说需要哪一类迭代器,这是很有帮助的;这有助于记录算法。

考虑以下备选实施:

代码语言:javascript
复制
template <typename ForwardIterator, typename T>
ForwardIterator skip_over(ForwardIterator first, ForwardIterator last, T const& x)
{
    while (first != last && *first == x)
        ++first;

    return first;
}
票数 7
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/3830

复制
相关文章

相似问题

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