首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用replace with std::ranges::views

使用replace with std::ranges::views
EN

Stack Overflow用户
提问于 2021-09-21 21:44:00
回答 1查看 94关注 0票数 1

我正在尝试使用Microsoft Visual Studio2019学习C++20中的范围。

我创建了一个函数来使字符串小写,并将所有空格替换为“_”。

代码语言:javascript
复制
template <typename R>
auto cpp20_string_to_lowercase_without_spaces( R&& rng )
{
    auto view = rng
        | std::ranges::views::transform( ::tolower )
        | std::ranges::views::common;

    std::ranges::replace( view, ' ', '_' );
    return view;
}

我得到了以下错误:

代码语言:javascript
复制
Error   C2672   'operator __surrogate_func': no matching overloaded function found  
Error   C7602   'std::ranges::_Replace_fn::operator ()': the associated constraints are not satisfied

在调用std::ranges::replace之前,我尝试使用view.begin(), view.end(),我尝试使用std::ranges::copy

是不是我做错了什么?

PS:在项目设置中,我不得不选择Preview - Features from the Latest C++ Working Draft (/std:c++latest),因为使用带有最新版本Visual Studio2019预览版的ISO C++20 Standard (/std:c++20)时,我无法在没有编译错误的情况下使用视图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-21 22:10:14

transform会创建一个不可修改的视图。具体地说,它创建了一个包含按需制造的对象的范围。它们没有永久的、固定的存储,所以它们不能被其他东西“替换”。

您可以将范围复制到容器中,然后在容器上执行替换操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69275870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档