@
cnbatch 不是很懂 c++, debug 模式下测试的, remove_ctrl_b 慢出的这些速度是不是 predicate 函数调用产生的. O3 选项能优化掉吗
// 901 milliseconds
std::string remove_ctrl(const std::string &s) {
std::string result;
for (int i = 0; i < s.length(); i++) {
if (s[i] >= 0x20)
result.push_back(s[i]);
}
return result;
}
// 1648 milliseconds
std::string remove_ctrl_b(const std::string &s) {
std::string dst;
dst.clear();
dst.reserve(s.size());
std::copy_if(s.begin(), s.end(), std::back_inserter(dst), [](auto ch) { return ch >= 0x20; });
return dst;
}