相关疑难解决方法(0)

为什么 C++ 范围“transform -> filter”为匹配过滤器谓词的值调用两次转换?

考虑使用范围库的以下代码(来自 c++20)

#include <iostream>
#include <ranges>
#include <vector>

int main() {
    std::vector<int> inputs{1, 2, 3, 4, 5, 6};

    auto square_it = [](auto i) {
        std::cout << i << std::endl;
        return i * 2; };

    auto results = inputs | std::views::transform(square_it) | std::views::filter([](auto i){ return i % 3 == 0; });

    for(auto r : results) {
        // std::cout << r << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

函数中的coutinsquare是记录square范围库何时调用该函数。此代码打印

1
2
3
3
4
5
6
6
Run Code Online (Sandbox Code Playgroud)

问题是,为什么匹配过滤器谓词的值会打印两次? …

c++ c++20

11
推荐指数
1
解决办法
454
查看次数

标签 统计

c++ ×1

c++20 ×1