2

文字列のベクトルがあり、ベクトル内のすべての「エース」をカウントしたいと考えています。今のところ、1つしか見つかりません...

int main()
{
    std::vector<string> vec;
    vec.push_back("Ace of Spades");
    vec.push_back("Ace");
    string value = "Ace";
    int cnt = 0;
    auto iter = find_if(begin(vec), end(vec), [&](const string &str)
    {
        return str.find(value) != str.npos;
    });
    if(iter == end(vec))
        cout << "no found" << endl;
    else 
    {
        cout << *iter << endl;
        cnt++;
        cout << cnt++ << endl;
    }
}
4

2 に答える 2

9

使用できますstd::count_if

auto cnt = count_if(begin(vec), 
                    end(vec), 
                    [&](const string& str) {
                      return str.find(value) != std::string::npos;
                    });

これは、 を含む文字列の数のみをカウントし、ベクターの要素内の"Ace"の出現回数の合計ではないことに注意してください。"Ace"

于 2013-08-29T12:50:15.270 に答える
1

一致する要素の数を数えたいだけなら、 std::count_ifを使用できます。それらを使って何かをする必要がある場合は、標準ライブラリのアルゴリズムを忘れて、次のように範囲指定を使用することをお勧めします。

int count = 0;
for (const auto& element : vec) {
    if (element.find(value) != std::string::npos) {
        std::cout << element << std::endl;
        ++count;
    }
}
std::cout << count << std::endl;
于 2013-08-29T13:04:12.390 に答える