std::string s("hello");std::find_if(s.begin(),s.end(),std::not1(::ispunct));
如果不编写自己的函数对象,如何使这段代码工作?
解决方法 请记住,将字符传递给来自C标准库的字符分类函数(以及toupper和tolower)的正确方法是首先将其转换为unsigned char,然后再转换为int.使用std :: ref和reference_wrapper是轻量级的,也是错误的.使用std :: function< bool(int)>或者std :: function< bool(char)>更重量级,也是错误的.在所有这些情况下,字符串中的char直接转换为int,这不是正确的方法.
如果你坚持不使用lambda,那么
std::find_if(s.begin(),std::not1(std::function<bool(unsigned char)>(::ispunct)));
是一种正确的方法.除此以外
std::find_if(s.begin(),[](unsigned char c) { return !ispunct(c); });
更容易理解 – 更短.
总结以上是内存溢出为你收集整理的c – 你如何使用std :: not1和std :: not2?全部内容,希望文章能够帮你解决c – 你如何使用std :: not1和std :: not2?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)