使用 join 连接范围

问题描述 投票:0回答:1

尝试使用 g++14 连接(连接)范围。有办法做到这一点吗?

#include <ranges>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main(){

    const vector<string> v = {"1","2","3"};

    const auto vv = {
        "{",
        v | views::join_with(','),
        "}"
    };

    const string buf = vv | views::join | ranges::to<string>();

}

错误:

prog.cc: In function 'int main()':
prog.cc:15:5: error: unable to deduce 'const std::initializer_list<auto>' from '{"{", std::ranges::views::__adaptor::operator|<_Partial<std::ranges::views::_JoinWith, char>, const std::vector<std::__cxx11::basic_string<char> >&>(v, ((const std::ranges::views::__adaptor::_RangeAdaptor<std::ranges::views::_JoinWith>*)(& std::ranges::views::join_with))->std::ranges::views::__adaptor::_RangeAdaptor<std::ranges::views::_JoinWith>::operator()<char>(',')), "}"}'
   15 |     };
      |     ^
prog.cc:15:5: note:   deduced conflicting types for parameter 'auto' ('const char*' and 'std::ranges::join_with_view<std::ranges::ref_view<const std::vector<std::__cxx11::basic_string<char> > >, std::ranges::single_view<char> >')
c++ concatenation g++ std-ranges c++23
1个回答
0
投票

比我希望的更详细。

#include <ranges>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main(){

    const vector<string> v = {"1","2","3"};

    const auto vv = {
        string("{"),
        v | views::join_with(',') | ranges::to<string>(),
        string("}")
    };

    const string buf = vv | views::join | ranges::to<string>();

}
© www.soinside.com 2019 - 2024. All rights reserved.