为什么std :: count会将常量传递给lambda,而不是在处理字符串时使用chars?

问题描述 投票:1回答:1

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

#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 :: count应该返回等于另一个元素的元素数(指定为函数的第三个参数)或者通过将元素逐个传递给该函数来满足某些函数,我希望它将字符传递给我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)'){return * __ it == _M_value; }

所以看起来像count将一些常量传递给我的小函数,后来尝试将它与char(并删除错误)进行比较。如何让我的代码工作? std :: count实际上是如何工作的?

c++ stl
1个回答
5
投票

std::count有三个参数:两个迭代器和一个要比较的值。所以它试图将lambda与字符串中的每个字符进行比较。

std::count_if有三个参数:两个迭代器和一个为字符串中的每个字符调用的“可调用”。

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

© www.soinside.com 2019 - 2024. All rights reserved.