如何使用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?
我正在尝试将一组字符串转换为小写,而无需使用诸如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。
相关文章:
- 使用std::multimap迭代器创建std::list
- 使用std::vector的OpenCL矩阵乘法
- 使用std::函数映射对象方法
- 使用"std::unordereded_map"映射到"std::list"对象
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用std::source_location报告错误的最佳实践
- 如何使用 std::累积在 C++ 中计算总和立方体
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- 有效地使用std::unordered_map来插入或增加键的值
- 使用std::list创建循环链表
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 使用std::mt19937从字符串中返回一个随机单词
- 使用std::istream::peek()总是安全的吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 在template中使用std::variant的template函数
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 为什么在C++20中对lambdas使用"std::bind_front"
- 如何使用std::min和std::less返回对象
- 使用 std::string () const 函数启动线程或未来
- 在std::cout之后使用std::cin时,换行符从何而来