c – 如何模拟不存在的find_first_not_of函数?

c – 如何模拟不存在的find_first_not_of函数?,第1张

概述std :: basic_string类模板具有成员函数find_first_of和find_first_not_of. <算法>头,但是,只包含一个通用的find_first_of. 问题1:是否缺席 std::find_first_not_of(Iter1 first1, Iter1 last1, Iter2 first2, Iter2 last2) 只是一个监督(例如copy_if),还是故 std :: basic_string类模板具有成员函数find_first_of和find_first_not_of.

<算法>头,但是,只包含一个通用的find_first_of.

问题1:是否缺席

std::find_first_not_of(Iter1 first1,Iter1 last1,Iter2 first2,Iter2 last2)

只是一个监督(例如copy_if),还是故意忽略,因为行为可以用另一个标准函数来实现?

当然,我可以写我自己的find_first_not_of,但是

问题2:在< algorithm>?例如,没有copy_if由于存在remove_copy_if来补偿

提前致谢

解决方法 我有同样的问题,简单的回答你的问题:标准stl库是不可能的(尽管可以使用boost :: phoenix).

但是,您可以在接受参数化的“Value”变量的序列迭代器周围编写自己的闭包,并返回一个bool结果.

template<class Iterator> struct is_not_in_range{    Iterator const begin;    Iterator const end;is_not_in_range(Iterator const& b,Iterator const& e)    :   begin(b),end(e) {}    template<class Value> bool operator()(Value & v)    {          return std::find(begin,end,v) == end;    }};

那么你可以这样做

std::find_if(begin1,end1,is_not_in_range<Iterator2>(begin2,end2));

或者,您可以编写一个使用较少分支的版本,但需要一个break-> continue(使用goto语句近似)

template<class Iterator1,class Iterator2> Iterator1 find_first_not_of(   Iterator1 const& begin1,Iterator1 const& end1,Iterator2 const& begin2,Iterator2 const& end2 ){    for(Iterator1 mID1 = begin1; mID1 != end1; ++mID1)    {        for(Iterator2 mID2 = begin2; mID2 != end2; ++mID2)            if(*mID1 == *mID2)                goto FOUND;        return mID1;FOUND:      ;    }    return end1;};
总结

以上是内存溢出为你收集整理的c – 如何模拟不存在的find_first_not_of函数?全部内容,希望文章能够帮你解决c – 如何模拟不存在的find_first_not_of函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1250927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存