如何编写可以遍历泛型类型的函数

on

我想编写如下print_all所述的函数

#include <iterator>
#include <vector>

template <typename V>
void print_all(std::iterator<std::input_iterator_tag, V> it) {
  for (; it != std::end(it); ++it) {
    V item = *it;
    // do stuff with item
  }
}

int main() {
  std::vector<int> myvec (10);

  print_all(myvec.cbegin());

  return 0;
}

我如何声明print_all它可以接受类型上的任何迭代器V

编辑

我想以类型安全的方式做到这一点。用例的一个更好的例子是累加器

#include <iterator>
#include <vector>
#include <functional>

template <typename V, typename K>
K accumulate(
      std::function<K(K, V)> accumulator,
      std::iterator<std::input_iterator_tag, V> it,
      std::iterator<std::input_iterator_tag, V> end,
      K initial) {
  K sum = initial;
  for (; it != end; ++it) {
    V item = *it;
    sum = accumulator(sum, item);
  }
  return sum;
}

现在您知道为什么这个问题不是this的重复我觉得会有一种类型安全的方法来执行此操作,其中编译器确保迭代器迭代正确的类型。这就是为什么我不愿接受史蒂夫·洛里默的回答。

史蒂夫·洛里默

假设您具有必需的重载std::ostream运算符,则只需将实际的迭代器作为函数模板的类型即可

template<typename IterT>
void print_all(IterT begin, IterT end)
{
    while (begin != end)
        std::cout << *begin++ << ", ";
    std::cout << '\n';
}

如前所述,这仅在您具有必要的std::ostream& operator<<(...)过载时才有效

您可以这样称呼它:

int main()
{
    std::vector<int> myvec;

    // populate myvec...

    print_all(std::begin(myvec), std::end(myvec));
    return 0;
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何遍历泛型类型的列表

来自分类Dev

如何编写一个以字符串和泛型类型为参数的函数?

来自分类Dev

如何使泛型类型的构造函数

来自分类Dev

如何遍历类列表并将其用作泛型类型?

来自分类Dev

尝试学习如何编写使用泛型类型的方法

来自分类Dev

如何使用Java 8编写函数的泛型迭代?

来自分类Dev

在Swift中声明函数的泛型类型符合“可以被乘”

来自分类Dev

泛型身份函数可以推断元组类型吗?

来自分类Dev

如何编写枚举类型的Swift泛型函数?

来自分类Dev

可以在引入其他泛型类型的泛型类上使用构造函数吗?

来自分类Dev

我如何才能要求可以比较泛型类型的引用与泛型类型的相等性?

来自分类Dev

从泛型函数创建泛型类型

来自分类Dev

如何为函数参数指定泛型类型

来自分类Dev

如何从接口返回函数的泛型/动态类型

来自分类Dev

如何通过传递的保护函数来缩小泛型类型?

来自分类Dev

如何从接口返回函数的泛型/动态类型

来自分类Dev

如何通过传递泛型类型创建多种用途的函数

来自分类Dev

是否可以通过仍然强制类型安全的方式编写泛型?

来自分类Dev

函数类型的接口内的泛型类型

来自分类Dev

泛型类型作为函数返回类型

来自分类Dev

非泛型方法是否可以返回泛型类型?

来自分类Dev

如何使泛型类型始终成为泛型类型列表?

来自分类Dev

如何在没有泛型类型参数的情况下定义泛型函数?

来自分类Dev

如何递归遍历嵌套的泛型集合?

来自分类Dev

如何递归遍历嵌套的泛型集合?

来自分类Dev

如何编写抽象打字稿泛型?

来自分类Dev

如何编写一个特征绑定以添加两个泛型类型的引用?

来自分类Dev

创建具有泛型类型的函数

来自分类Dev

为泛型类型实现均值函数

Related 相关文章

  1. 1

    如何遍历泛型类型的列表

  2. 2

    如何编写一个以字符串和泛型类型为参数的函数?

  3. 3

    如何使泛型类型的构造函数

  4. 4

    如何遍历类列表并将其用作泛型类型?

  5. 5

    尝试学习如何编写使用泛型类型的方法

  6. 6

    如何使用Java 8编写函数的泛型迭代?

  7. 7

    在Swift中声明函数的泛型类型符合“可以被乘”

  8. 8

    泛型身份函数可以推断元组类型吗?

  9. 9

    如何编写枚举类型的Swift泛型函数?

  10. 10

    可以在引入其他泛型类型的泛型类上使用构造函数吗?

  11. 11

    我如何才能要求可以比较泛型类型的引用与泛型类型的相等性?

  12. 12

    从泛型函数创建泛型类型

  13. 13

    如何为函数参数指定泛型类型

  14. 14

    如何从接口返回函数的泛型/动态类型

  15. 15

    如何通过传递的保护函数来缩小泛型类型?

  16. 16

    如何从接口返回函数的泛型/动态类型

  17. 17

    如何通过传递泛型类型创建多种用途的函数

  18. 18

    是否可以通过仍然强制类型安全的方式编写泛型?

  19. 19

    函数类型的接口内的泛型类型

  20. 20

    泛型类型作为函数返回类型

  21. 21

    非泛型方法是否可以返回泛型类型?

  22. 22

    如何使泛型类型始终成为泛型类型列表?

  23. 23

    如何在没有泛型类型参数的情况下定义泛型函数?

  24. 24

    如何递归遍历嵌套的泛型集合?

  25. 25

    如何递归遍历嵌套的泛型集合?

  26. 26

    如何编写抽象打字稿泛型?

  27. 27

    如何编写一个特征绑定以添加两个泛型类型的引用?

  28. 28

    创建具有泛型类型的函数

  29. 29

    为泛型类型实现均值函数

热门标签

归档