You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用std::ranges拼接视图,替代ranges-v3的views::concat功能?

std::ranges 拼接两个视图的解决方案

问题根因

  • std::ranges::views::concat 是C23才正式加入标准库的特性,C20版本的标准库没有提供该接口,这是你从ranges-v3切换到标准库后concat失效的核心原因。
  • join视图无法直接使用的原因:join的作用是拉平嵌套的区间结构(例如将[[a,b],[c,d]]转为[a,b,c,d]),不支持直接拼接两个独立的平级视图。

方案1:使用C++23(推荐)

如果你的编译器支持C++23(GCC 12+, Clang 16+, MSVC 2022 17.4及以上版本),直接使用标准库自带的concat即可,修改后的代码如下:

#include <string>
#include <iostream>
#include <ranges>
using namespace std;
using namespace views;

void snake_to_camel() {   
    auto const s = string{"feel_the_force"};
    auto words = s | split('_');                        
    auto words_cap = words | transform([](auto word){
        auto head = word | take(1) 
                         | transform([](unsigned char c){return toupper(c);}); 
        auto tail = word | drop(1);                     
        return concat(head, tail);
    });                                                 
    auto s_camelcase = words_cap | join;                
    string res(s_camelcase.begin(), s_camelcase.end());
    cout << res;
}

int main() {
    snake_to_camel();
    cout << endl;
}

运行后输出为FeelTheForce,符合预期。

方案2:C++20兼容实现

如果暂时无法升级到C++23,你当前的蛇形转驼峰场景可以不用依赖视图拼接,直接构造临时字符串处理即可,逻辑更直观:

#include <string>
#include <iostream>
#include <ranges>
using namespace std;
using namespace views;

void snake_to_camel() {   
    auto const s = string{"feel_the_force"};
    auto words = s | split('_');                        
    auto words_cap = words | transform([](auto word){
        string w(word.begin(), word.end());
        w[0] = toupper(static_cast<unsigned char>(w[0]));
        return w;
    });                                                 
    auto s_camelcase = words_cap | join;                
    string res(s_camelcase.begin(), s_camelcase.end());
    cout << res;
}

int main() {
    snake_to_camel();
    cout << endl;
}

内容的提问来源于stack exchange,提问作者Generic Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:36:03