gpt4 book ai didi

c++ - 如何编写使用临时容器的范围管道?

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:52 26 4
gpt4 key购买 nike

我有一个带有这个签名的第三方函数:

std::vector<T> f(T t);

我还有一个名为 srcT 的现有潜在无限范围 ( of the range-v3 sort)。我想创建一个管道,将 f 映射到该范围内的所有元素,并将所有 vector 及其所有元素展平到一个范围内。

出于本能,我会写下以下内容。

 auto rng = src | view::transform(f) | view::join;

但是,这个 不会工作 以前没有工作,因为我们 不能 不能创建临时容器的 View 。

UPDATE: This issue has been patched通过 this commit .

range-v3 如何支持这样的范围管道?

最佳答案

看起来像there are now test cases in the range-v3 library显示如何正确执行此操作。有必要将 views::cache1 运算符添加到管道中:

auto rng = views::iota(0,4)
| views::transform([](int i) {return std::string(i, char('a'+i));})
| views::cache1
| views::join('-');
check_equal(rng, {'-','b','-','c','c','-','d','d','d'});
CPP_assert(input_range<decltype(rng)>);
CPP_assert(!range<const decltype(rng)>);
CPP_assert(!forward_range<decltype(rng)>);
CPP_assert(!common_range<decltype(rng)>);

所以 OP 问题的解决方案是写

auto rng = src | views::transform(f) | views::cache1 | views::join;

关于c++ - 如何编写使用临时容器的范围管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822467/

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