Xig*_*gma 3 c++ transform std tolower
为什么 std::transform 不能以这种方式工作:
std::string tmp = "WELCOME";
std::string out = "";
std::transform(tmp.begin(), tmp.end(), out.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)
出来是空的!
但这有效:
std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)
我不希望转变就地发生。
您正在写入越界内存,因为 的范围out小于 的范围tmp。out您可以通过应用来存储结果std::back_inserter。
正如 user17732522 所指出的,由于获取标准库函数的地址是不合法的,所以最好传递一个std::tolower在需要时调用该字符的 lamda 对象。
std::transform(tmp.begin(), tmp.end(), std::back_inserter(out), [](auto c) {
return std::tolower(static_cast<unsigned char>(c));
});
Run Code Online (Sandbox Code Playgroud)