【发布时间】:2021-12-09 11:02:13
【问题描述】:
我正在尝试计算一个反向的views::partial_sum。下面的代码给出了非反转 partial_'min' 的预期结果,但我需要使用ranges::to_vector 来取消views::reverse 最终结果(因为你不能views::reverse 和views::partial_sum) .但是,当第二个to_vector 未注释时,intermediate2 的views::values 全部为零(尽管键计算正确)。取消注释第一个 to_vector 将解决此问题,但我想知道为什么?我是否可以避免第一个to_vector?或者我是否应该不理会理解而直接输入to_vectors,直到代码正常工作。
auto input = std::vector<float>{} | actions::push_back(views::iota(0u, COUNT)) | actions::shuffle(std::default_random_engine{});;
auto intermediate1 = views::zip(views::iota(0u, COUNT), input)
//| to_vector
;
auto intermediate2 = intermediate1
| views::reverse
| views::partial_sum(
[](std::pair<unsigned, float> a, std::pair<unsigned, float> b)
{
if (a.second > b.second)
return b;
else
return a;
})
//| to_vector
;
auto ans = intermediate2
//| views::reverse
;
std::cout << "values = " << (ans | ranges::views::values | views::take(23)) << std::endl;
std::cout << "indices = " << (ans | ranges::views::keys | views::take(23)) << std::endl;
编辑
我忽略了取消注释最后的reverse 再次破坏了代码,即使to_vectors 也是如此,所以根据 Barry 的回答,reverse 一定有问题。
【问题讨论】:
标签: c++ c++20 range-v3 std-ranges