如何使用for_each,transform,Iterator和lambda的某种组合将STD ::集合的字符串转换为小

How to convert a std::set of strings to lowercase c++ using some combination of for_each, transform, iterators and lambda?

本文关键字:何使用 STD 集合 字符串 转换 组合 transform for each Iterator lambda      更新时间:2023-10-16

我正在尝试将一组字符串转换为小写,而无需使用诸如while和for(;;)之类的低级循环,因为我正在使用STL练习。我正在考虑使用for_each和transform and lambda,但我不确定它们是如何工作的。

#include <string>
#include <iterator>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
    set<string> words;
    //insert a bunch of words using words.insert().....
    //convert everything in words to lower case
    return 0;
}

如何使用for_each,transform,tererators and lambdas的任何组合使用集合words中的每个字符串?

我正在考虑做类似:transform(words.begin(), words.end(), words.begin(), ??lambda??)的事情

您不能做诸如transform(word.begin(),word.end.end(),word.begin(),?? lambda ??),因为words.begin()将是const迭代器。

您必须做这样的事情:

set<string> words;
set<string> new_words;
transform(words.begin(), words.end(), std::inserter(new_words, new_words.begin()), [](string s) {
        transform(s.begin(), s.end(), s.begin(), ::tolower); 
        return s;
    });
return new_words;

尝试

     std::for_each(words.begin(),words.end(),[](char & c) { c = tolower(c); });

并包括cctype。