gpt4 book ai didi

c++ - 使用 Range v3 范围,如何将 View 和操作组合到一个管道中?

转载 作者:可可西里 更新时间:2023-11-01 16:30:44 27 4
gpt4 key购买 nike

我正在学习 C++20 范围(使用 Range-V3-VS2015 )。我有这段代码可以正常工作:

string clean;
auto tmp1 = input | view::remove_if(not_alpha) | view::transform(::tolower);
std::copy(tmp1.begin(), tmp1.end(), std::back_inserter(clean));
auto tmp2 = clean |= action::sort | action::unique;

但是,我想将定义 tmp1tmp2 的两个管道组合成一个管道。那可能吗?我尝试了很多方法,包括在中间添加 view::moveview::copy,但都无济于事。

最佳答案

是的,你可以。您需要使用转换将 View 具体化为实际容器以对其执行操作。我在 range-v3 master 分支中发现了一段新代码介绍 range::v3::to<Container>执行此类转换。

git blame建议 Eric 今年(2019 年)开始研究它,但尚未真正记录下来。但是,我发现 range-v3/test关于如何使用库的非常好的学习 Material :)

我怀疑它在 VS2015 分支中是否可用。不过Visual 2017已经可以走库的master分支了。

#include <string>
#include <iostream>
#include <cctype>
#include <range/v3/view/filter.hpp>
#include <range/v3/view/transform.hpp>
#include <range/v3/action/sort.hpp>
#include <range/v3/action/unique.hpp>
#include <range/v3/range/conversion.hpp>

int main() {
using namespace ranges::v3;
std::string input = " 1a2a3Z4b5Z6cz ";
std::string result = input
| view::filter(::isalpha)
| view::transform(::tolower)
| to<std::string>
| action::sort
| action::unique;
std::cout << result << std::endl;
return 0;
}

输出:

abcz

我相信这是你所期望的

关于c++ - 使用 Range v3 范围,如何将 View 和操作组合到一个管道中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56174471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com