为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符



我有一个字符串,想计算其中的某些元素。我写了一个代码:

#include <iostream>
#include <set>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
    string a;
    cin >> a;
    int b = count(a.begin(), a.end(), [](char g) {return (g == '"' or g == '.' or g == ',' or g == ';' or g == ':' or g == '!' or g == '?');});
    cout << b;
}

由于std ::计数应返回等于另一个元素(指定为函数的第三参数)的元素数量,或者通过一对一传递到该功能而符合某些函数的元素,我希望它通过对我的lambda功能的字符。我在cppreference上的最后一个示例中大部分时间都像上面的示例一样,但看起来它并不是我期望的。在编译期间,我面临lambda功能的错误:

/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../../include/c /8/bits/predefined_ops.h:241:17: 错误:无效的操作数到二进制表达式('char'和'const (lambda at/home/keddad/clionprojects/olimp/main.cpp:12:39)') {返回 *__ it == _m_value;}

因此,看起来计数传递给我的小函数某种常数,后来试图将其与char(并删除错误)进行比较。如何使我的代码工作?STD :: Count实际上有效吗?

std::count采用三个参数:两个迭代器和一个值得比较的值。因此,它试图将lambda与字符串中的每个字符进行比较。

std::count_if采用三个参数:为字符串中的每个字符调用两个迭代器和一个"可呼叫"。

正如 @piotr-skotnicki所说,我怀疑您想使用count_if