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; };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。