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

山姆·马丁

我目前正在研究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编译器。

Yakk-亚当·内夫罗蒙特
std::vector<int> count_all_evens(const IntMatrix& numbers)
{
  auto view = numbers | std::ranges::views::transform(count_evens);
  return {view.begin(), view.end()};
}

一个建议,以减少这种吮吸。

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) };
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么/何时应该使用c ++中的作用域运算符在类之外声明方法?

来自分类Dev

在链表程序中使用模板时,在C ++中重载<<运算符

来自分类Dev

为什么运算符在C ++-CLI中不起作用?

来自分类Dev

什么是C ++中的“ <?=”运算符?

来自分类Dev

C#泛型类运算符不起作用

来自分类Dev

在C#中的if运算符中使用like运算符

来自分类Dev

什么是C / C ++中的“->”运算符?

来自分类Dev

在C ++中使用-二进制运算符从变量中移除int时发出警告。原因是什么?

来自分类Dev

为什么“ as”运算符在C#中不使用隐式转换运算符?

来自分类Dev

在C ++中重载运算符时,为什么T *优于bool?

来自分类Dev

用户定义类的运算符重载在C ++中不起作用

来自分类Dev

C ++逻辑否定比较运算符不起作用

来自分类Dev

运算符“”在C ++中做什么?

来自分类Dev

C ++中的模板类重载运算符ostream不起作用

来自分类Dev

在C ++中我的运算符重载前缀不起作用

来自分类Dev

什么是C / C ++中的“->”运算符?

来自分类Dev

关系运算符重载在C ++中不起作用

来自分类Dev

在C中使用逗号运算符

来自分类Dev

为什么在调用bash -c时源不起作用

来自分类Dev

什么是C ++中的“ <?=“运算符?

来自分类Dev

C#泛型类运算符不起作用

来自分类Dev

为什么SQL逻辑运算符在c#命令中不起作用?

来自分类Dev

在C ++中使用-二进制运算符从变量中移除int时发出警告。原因是什么?

来自分类Dev

为什么在使用“不等于”时,if运算符或运算符不起作用?

来自分类Dev

C中的一元运算符取反不起作用

来自分类Dev

复制构造函数和Assignemnt运算符重载在C ++中不起作用

来自分类Dev

c#“$”运算符在窗口 7 中不起作用

来自分类Dev

C++ 增量运算符重载作为友元函数不起作用?

来自分类Dev

为什么从 C# 运行时 python 中的相对路径不起作用,但在 C# 之外使用相同的解释器时却起作用?

Related 相关文章

  1. 1

    为什么/何时应该使用c ++中的作用域运算符在类之外声明方法?

  2. 2

    在链表程序中使用模板时,在C ++中重载<<运算符

  3. 3

    为什么运算符在C ++-CLI中不起作用?

  4. 4

    什么是C ++中的“ <?=”运算符?

  5. 5

    C#泛型类运算符不起作用

  6. 6

    在C#中的if运算符中使用like运算符

  7. 7

    什么是C / C ++中的“->”运算符?

  8. 8

    在C ++中使用-二进制运算符从变量中移除int时发出警告。原因是什么?

  9. 9

    为什么“ as”运算符在C#中不使用隐式转换运算符?

  10. 10

    在C ++中重载运算符时,为什么T *优于bool?

  11. 11

    用户定义类的运算符重载在C ++中不起作用

  12. 12

    C ++逻辑否定比较运算符不起作用

  13. 13

    运算符“”在C ++中做什么?

  14. 14

    C ++中的模板类重载运算符ostream不起作用

  15. 15

    在C ++中我的运算符重载前缀不起作用

  16. 16

    什么是C / C ++中的“->”运算符?

  17. 17

    关系运算符重载在C ++中不起作用

  18. 18

    在C中使用逗号运算符

  19. 19

    为什么在调用bash -c时源不起作用

  20. 20

    什么是C ++中的“ <?=“运算符?

  21. 21

    C#泛型类运算符不起作用

  22. 22

    为什么SQL逻辑运算符在c#命令中不起作用?

  23. 23

    在C ++中使用-二进制运算符从变量中移除int时发出警告。原因是什么?

  24. 24

    为什么在使用“不等于”时,if运算符或运算符不起作用?

  25. 25

    C中的一元运算符取反不起作用

  26. 26

    复制构造函数和Assignemnt运算符重载在C ++中不起作用

  27. 27

    c#“$”运算符在窗口 7 中不起作用

  28. 28

    C++ 增量运算符重载作为友元函数不起作用?

  29. 29

    为什么从 C# 运行时 python 中的相对路径不起作用,但在 C# 之外使用相同的解释器时却起作用?

热门标签

归档