c++ - c++中模板函数count的语法

标签 c++

我正在关注有关函数模板 Count 的示例,但我遗漏了一些东西。我当然没有完全理解 iterator_traits,我很困惑:

模板函数 COUNT 已声明为:

template <class InputIterator, class T>
  typename iterator_traits<InputIterator>::difference_type  
   count (InputIterator first, InputIterator last, const T& val);

我的问题:

1) 为什么使用 iterator_traits::difference_type ? 该函数返回一个对象为什么不使用简单的:

template <class InputIterator, class T>
 T count(InputIterator first, InputIterator last, const T& val); 

我已经尝试并成功了。

2) 如果我必须使用 iterator_traits,为什么我应该使用“different_type”(从一个迭代器中减去另一个)而不是“value_type”(迭代器可以指向的值)?

即使在这种情况下我也尝试过并工作过。

我认为当函数返回 Iterator 时应该使用 iterator_traits,但后来我看到了模板函数 FIND,这让我更加困惑。

template <class InputIterator, class T>
 InputIterator find (InputIterator first, InputIterator last, const T& val);

而我会这样编码:

template <class InputIterator, class T>
 typename iterator_traits<InputIterator>::value_type 
  find( nputIterator first, InputIterator last, const T& val);

有人可以澄清这一点吗?

非常感谢您的帮助。

最佳答案

std::count 应该返回某个元素的 count ,因此返回类型需要是整数类型,但是 T 不一定是整数类型,因为它可以是任何东西(准确地说,它是元素的类型)。

关于c++ - c++中模板函数count的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408325/

相关文章:

c++ - 队列与 mod 操作

c++ - 无法在 C++ 中嵌入的 Python 代码中修改 time.time() 返回的值

c++ - C++11中auto是如何实现的

c++ - 如何正确调用模板函数?

c++ - 必须输入两次值才能工作 C++

c++ - 为什么 gcc 6.4.0 c++14 自动将左值移动到右值

c++ - C++ 什么时候需要模板参数?

c++ - 在您配置的INTEL C++编译器(Linux)的搜索路径中找不到可执行文件

c++ - OpenCV 点类型转换

c++ - 二叉树插入函数