对于那些更喜欢简洁、易读的lambda编码风格的人...
这个例子会从一个宽字符串中移除所有非字母数字和空格字符。你可以与其他ctype.h帮助函数混合使用,以去除看起来复杂的基于字符的测试。
(我不确定这些函数如何处理CJK语言,所以请小心.)
// Boring C loops: 'for(int i=0;i<str.size();i++)'
// Boring C++ eqivalent: 'for(iterator iter=c.begin; iter != c.end; ++iter)'
看看这个是否比吵闹的C/C++ for/iterator循环更容易理解:
TSTRING label = _T("1. Replen & Move RPMV");
TSTRING newLabel = label;
set<TCHAR> badChars;
for_each(label.begin(), label.end(), [&badChars](TCHAR n){
if (!isalpha(n) && !isdigit(n))
badChars.insert(n);
});
for_each(badChars.begin(), badChars.end(), [&newLabel](TCHAR n){
newLabel.erase(std::remove(newLabel.begin(), newLabel.end(), n), newLabel.end());
});
运行此代码后的newLabel结果为:“1ReplenMoveRPMV”
这只是学术上的问题,因为如果你已经确定了哪些字符是“badChars”,将lambda0(第一个for_each)中的“if”逻辑合并到单个lambda1(第二个for_each)中显然更加精确、简洁和高效。