gpt4 book ai didi

c++ - 为什么在 C++20 中使用范围时管道运算符不起作用?

转载 作者:行者123 更新时间:2023-12-04 13:10:40 30 4
gpt4 key购买 nike

我目前正在研究 Expert C++ 一书中的示例。
在第 7 章中,他们提供了以下用于将函数映射到矩阵的代码:

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

using IntMatrix = std::vector<std::vector<int>>;

int count_evens(const std::vector<int>& number_line) {
return std::count_if(number_line.begin(),
number_line.end(), [](int num){return num % 2 == 0;});
}

std::vector<int> count_all_evens(const IntMatrix& numbers)
{
return numbers | std::ranges::views::transform(count_evens); // ERROR APPEARS HERE AT |
}

int main()
{
IntMatrix m{{1, 2, 3}, {4, 5, 6}};
for (auto item : count_all_evens(m)) {
std::cout << item << " ";
}
std::cout << std::endl;
return 0;
}
我在第 14 行收到一条错误消息:
could not convert 'std::ranges::views::__adaptor::operator|<const std::vector<std::vector<int> >&>((* & numbers), std::ranges::views::transform.std::ranges::views::__adaptor::_RangeAdaptor<std::ranges::views::<lambda(_Range&&, _Fp&&)> >::operator()<int (&)(const std::vector<int, std::allocator<int> >&)>(count_evens))' from 'std::ranges::transform_view<std::ranges::ref_view<const std::vector<std::vector<int> > >, int (*)(const std::vector<int>&)>' to 'std::vector<int>'

还有其他人有这个问题吗?我正在使用 g++10 编译器。

最佳答案

std::vector<int> count_all_evens(const IntMatrix& numbers)
{
auto view = numbers | std::ranges::views::transform(count_evens);
return {view.begin(), view.end()};
}
a proposal为了让这更糟。
std::vector<int> count_all_evens(const IntMatrix& numbers)
{
auto view = numbers | std::ranges::views::transform(count_evens);
return std::ranges::to<std::vector<int>>(view);
}
你也可以花心
template<class Range>
struct to_container {
Range&& r;
template<class Container>
operator Container()&&{ return {r.begin(), r.end()}; }
};
template<class Range>
to_container(Range&&)->to_container<Range>;

std::vector<int> count_all_evens(const IntMatrix& numbers)
{
return to_container{ numbers | std::ranges::views::transform(count_evens) };
}

关于c++ - 为什么在 C++20 中使用范围时管道运算符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65635581/

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