计算一个整数截断符上面有多少个字符

Count how many characters above an integer cutoff

本文关键字:多少 字符 一个 整数 计算      更新时间:2023-10-16

C++中是否有一种更有效的方法来计算string中其整数ASCII值高于某个截止值的字符数,而不是在整个string的循环中一次评估一个char ?

正如drescherjm所说,您需要的是std::count_if。例如,查找ASCII值大于'3'的所有字符:

 std::string s = "12345";
 const char value = '3';
 int count = std::count_if(s.begin(), s.end(), 
     [](const char& a) { return a > value; } );

你可以并行化(线程)或向量化(SSE矢量指令),我猜,虽然优化最大化,一些编译器会向量化一个简单的检查循环,像这样,所以显式向量化是不需要的。

节省的可能很小;对于这么简单的任务,要么字符串足够小,优化没有帮助/重要,要么你可能是内存带宽限制;CPU可以快速处理这样的字符串

也就是说,没有真正的理由去麻烦。std::countif将使代码变得简单,所以除非您已经证明(通过分析)代码太慢,否则就使用它:

int num_above_a = std::count_if(v.begin(), v.end(), [](unsigned char c){return c > 'a';})