【问题标题】:in a set transform to lowcase c++ errorC2664在一组转换为小写 C++ 错误 C2664
【发布时间】:2016-12-04 22:20:58
【问题描述】:

我正在尝试使用 STL 函数 transform 将集合中的所有字符串转换为小写。但是我收到了 C2664 的错误。我想知道我的代码有什么问题?

set<string> mydoc;
mydoc.insert("ABCD");
transform(mydoc.begin(), mydoc.end(), mydoc.begin(), ::tolower);
copy(mydoc.begin(), mydoc.end(), output);

【问题讨论】:

  • tag info 解释得还不够好吗?
  • 1. set&lt;string&gt; 的每个迭代器指的是什么类型(集合中存储了什么)? 2.tolower期望的类型是什么?
  • @Pixelchemist 'ostream_iterator output(cout, "\n");'是迭代器
  • @JoviZhihaoZhou:我的意思是在transform 声明中。迭代器(mydoc.begin() 的结果)引用的类型是什么(不是迭代器类型本身)?当您迭代一组strings 时,它指的是std::string。因此,您尝试通过传递一个接受 character 而不是字符串参数的函数来转换一组字符串。
  • @Pixelchemist 知道了!解决了我的问题。

标签: c++ transform lowercase c2664


【解决方案1】:
  1. 您不能将std::string 传递给tolower
  2. C++11 set 迭代器是const

因此,在将 string 插入到 set 时,您可能应该将 tolower 应用于每个 string,而不是事后更改它,因为您必须浪费时间将每个元素重新插入到已排序的容器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2014-06-29
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多