我们知道,作用于同一容器的 2 个同类型迭代器可以有效指定一个区间范围。在此基础上,如果想获取该指定范围内包含元素的个数,就可以借助本节要讲的 distance() 函数。

distance() 函数用于计算两个迭代器表示的范围内包含元素的个数,其语法格式如下:

template<class InputIterator>
  typename iterator_traits<InputIterator>::difference_type distance (InputIterator first, InputIterator last);

其中,first 和 last 都为迭代器,其类型可以是输入迭代器、前向迭代器、双向迭代器以及随机访问迭代器;该函数会返回[first, last)范围内包含的元素的个数。

注意,first 和 last 的迭代器类型,直接决定了 distance() 函数底层的实现机制:

  • 当 first 和 last 为随机访问迭代器时,distance() 底层直接采用 last - first 求得 [first, last) 范围内包含元素的个数,其时间复杂度为O(1)常数阶;
  • 当 first 和 last 为非随机访问迭代器时,distance() 底层通过不断执行 ++first(或者 first++)直到 first==last,由此来获取 [first, last) 范围内包含元素的个数,其时间复杂度为O(n)线性阶。

代码展示

#include <iostream>     // std::cout
#include <iterator>     // std::distance
#include <list>         // std::list
using namespace std;int main() {//创建一个空 list 容器list<int> mylist;//向空 list 容器中添加元素 0~9for (int i = 0; i < 10; i++) {mylist.push_back(i);}//指定 2 个双向迭代器,用于执行某个区间list<int>::iterator first = mylist.begin();//指向元素 0list<int>::iterator last = mylist.end();//指向元素 9 之后的位置//获取 [first,last) 范围内包含元素的个数cout << "distance() = " << distance(first, last);return 0;
}

c++之std::distance()函数相关推荐

  1. LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] c++

    LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++> 给出排序好的 ...

  2. R语言计算平均值的标准误差(standard error of the mean):自定义函数计算平均值的标准误差、使用plotrix包的std.error函数计算平均值的标准误差

    R语言计算平均值的标准误差(standard error of the mean):自定义函数计算平均值的标准误差.使用plotrix包的std.error函数计算平均值的标准误差 目录

  3. R语言std.error函数计算平均值的标准误差实战

    R语言std.error函数计算平均值的标准误差实战 目录 R语言std.error函数计算平均值的标准误差实战 #手动编码标准误差计算

  4. 函数对象,lamdda表达式,function函数包装,std::bind函数绑定

    一 函数对象 在学习其他知识之前,先来学习函数对象,然后引出std::lambda.std::function.std::bind等内容的学习,那么究竟什么是函数对象呢? 函数对象(Function ...

  5. c++ std::swap() 函数

    c++ std::swap() 函数 最近刚开始学习c++容器,发现容器中提供的swap()函数并不是交换了两个容器的内容,而是交换了两个容器的地址.比如如下代码: #include <vect ...

  6. 恶搞一下std::forward函数

    文章目录 前言 函数模板 forwawrd 函数定义 forwawrd 完美转发 完美转发失效 总结 前言 关于 std::forward 的用法在之前的文章 <C++11中std::move和 ...

  7. std::distance 用法

    描述:        得到两个迭代器之间的距离. 定义: template< class InputIt > typename std::iterator_traits<InputI ...

  8. 没想到C++中的std::remove_if()函数历史还挺悠久

    文章目录 前言 `remove_if`的历史 `remove_if`的实现 具体使用 总结 前言 看到 remove 这个单词的第一反应是什么意思?我的第一感觉是删除.去掉的意思,就像一个程序员看到 ...

  9. C++ std::ref() 函数使用详解

    std::ref()是C++标准库中的一个函数,定义在<functional>头文件中,它的作用是将一个对象转换成一个引用包装器(reference wrapper),以便在函数模板中使用 ...

最新文章

  1. 转载自——Json.net动态序列化以及对时间格式的处理
  2. ASP.NET MVC 中将FormCollection与实体间转换方法
  3. java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除
  4. RPC 中 参数传递 ImputStream 流会关闭
  5. jx8net一定在所有的方方面面都更坚强更勇敢了吧
  6. 计算机专业的口号运动会四字,计算机系运动会口号
  7. MySQL Mathematical Functions(数学方法)
  8. gcc/g++ 如何支持c11/c++11标准编译
  9. elementui的表格在使用v-if之后列的顺序错乱问题
  10. linux为mysql创建gpower_mysql在linux下的安装
  11. 将.npy文件转.txt文件
  12. 最小生成树——贪心算法
  13. 图片识别word c#
  14. 虚拟机类加载机制(类加载过程)
  15. 小程序uniapp实现左滑删除效果
  16. IDEA官方中文插件!!!
  17. css直角线_css斜切角 斜边 倒角
  18. 定积分在几何学上的应用
  19. 容器java堆内存什么时候回收_JVM内存垃圾回收方法
  20. redisflush操作

热门文章

  1. 软件工程理论方法与实践
  2. 2.SDK目录结构和adb工具及命令介绍
  3. awksed story
  4. HTML参考系列(1)-文本格式化标签
  5. Python办公自动化(四) | 批量处理文件
  6. Nginx实战|Nginx健康检查
  7. 触发器中的 临时表 old 与 new
  8. 【Hive】Hive内部表/外部表
  9. linux/ubuntu下简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)
  10. 解决Pycharm添加虚拟解释器的报错问题