考虑使用范围库的以下代码(来自 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)
问题是,为什么匹配过滤器谓词的值会打印两次? …