容器:begin和end函数

begin和end是容器的两个成员函数

除了vector之外,标准库还定义了其他几种容器,所有标准库容器都可以使用迭代器

严格来说string类型不属于容器类型,但string支持很多与容器类似的操作

和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员

  • begin和end

    • begin:返回指向容器第一个元素的迭代器

    • end:返回指向容器最后一个元素下一个位置的迭代器

    begin和end返回的具体类型由对象是否是常量决定:

    • 如果对象是常量,begin和end返回const_iterator
    • 如果对象不是常量,返回iterator
    vector<int> v1;
    const vector<int> v2;
    auto itr1 = v1.begin();//itr1的类型是vector<int>::iterator,返回指向容器第一个元素的迭代器
    auto itr2 = v2.end();//itr2的类型是vector<int>::const_iterator,返回指向容器最后一个元素下一个位置的迭代器
    
  • cbegin和cend

    C++11新标准引入的两个新运算符

    • cbegin:返回指向容器第一个元素的迭代器
    • cend:返回指向容器最后一个元素下一个位置的迭代器

    重点是,不论vector对象(或者string对象)是否是常量,返回的都是const_iterator。

    vector<int> v1;
    auto itr1 = v1.cbegin();//itr1的类型是vector<int>::const_iterator,返回指向容器第一个元素的迭代器
    
  • rbegin和rend

    带r的版本返回反向迭代器

    反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器

    • 递增一个迭代器(++it)会移动到前一个元素
    • 递减一个迭代器(–it)会移动到下一个元素

    除了forward_list之外,其他容器都支持反向迭代器,反向迭代器也有const和非const版本

    • crbegin:返回指向容器尾元素位置的const迭代器
    • crend:返回指向容器首元素之前一个位置的const迭代器
    • rbegin:返回指向容器尾元素位置的迭代器
    • rend:返回指向容器首元素之前一个位置的迭代器

数组:标准库函数begin和end

定义在iterator头文件中

数组不是类型,所以这两个begin和end不是成员函数.

  • begin:返回指向数组首元素的指针
  • end:返回指向数组尾元素下一个位置的指针
int a[] = {1, 2, 3, 4 ,5};//a是一个含有5个整型的数组
int *fir = begin(a);//指向a首元素的指针
int *las = end(a);//指向a尾元素下一个位置的指针

注意尾后指针不能执行解引用和递增操作。

[C++] C++中的begin和end相关推荐

  1. oracle中begin end的作用,如何在SQL * Plus中使用begin/end运行Oracle查询?

    我已经用begin/end创建了一个查询块,并且想要在SQL * Plus中运行它.但是我怎样才能在命令行中运行它?如何在SQL * Plus中使用begin/end运行Oracle查询? 其实代码来 ...

  2. spSellProduct 中,Begin Transaction 和 Commit Transaction 语句被包装在 Begin Try 和 End Try 块之间

    如何在 SQL Server 中使用 Try Catch 处理错误? 从 SQL Server 2005 开始,我们在TRY 和 CATCH块的帮助下提供了结构错误处理机制.使用TRY-CATCH的语 ...

  3. [SV]SystemVerilog中forever begin end導致的Hang死

    SystemVerilog中forever begin end導致的Hang死 一.當if條件不成立的時候,肯定會hang死. forever beginif(expre == 1) beginrun ...

  4. sql中的begin....end

    Begin ... End 之间的是一个语句块,一般Begin...End用在  ( 相当于  {}) while if等语句中 在T_SQL中,if/while后只能紧跟一条sql语句,如果有多条则 ...

  5. Yii2中ActiveForm::begin()的常用参数

    通过打印begin里的数组发现,不能使用class属性,会和使用的activeForm相冲突,所以,使用的样式class都以option数组来配置 基础版 'countrys-form','metho ...

  6. STL vector中的begin方法(3)

    原文地址:http://www.cplusplus.com/reference/vector/vector/begin/ public member function <vector> s ...

  7. LaTex中对\begin{itemize}或\begin{enumerate}中的各项新的段落增加缩进

    转自:How to indent a new paragraph within items? 解决方案 在前序部分(在\begin{document}前)加入如下代码块: \usepackage{en ...

  8. 无法在数据库 'ycmis2' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。...

    alter database ycmis2 set EMERGENCY  alter database ycmis2 set online 转载于:https://www.cnblogs.com/qa ...

  9. 如何在JavaScript中切片和拼接数组

    .slice() and .splice() are similar methods in JavaScript. They look similar, they sound similar, and ...

最新文章

  1. 逆序对(树状数组解决)
  2. javascript设计模式_开发者都应该了解的7种JavaScript设计模式
  3. 使用 gitlab 进行代码管理
  4. 部署LAMP-WordPress站点上线
  5. eclipse/myeclipse高亮显示相同变量名 .
  6. jbehave_使用JBehave,Gradle和Jenkins的行为驱动开发(BDD)
  7. Redis开发运维实践上线部署规划之持久化设置
  8. matlab 箱图不显示异常值_欧姆龙E5EZ温控器PV显示值跳动异常的处理,一看就懂...
  9. 斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感
  10. 如何ajax上传文件,如何实现Ajax文件上传功能
  11. LabVIEW学习笔记(1)
  12. iOS维码的生成和扫描
  13. 知识图谱论文读后感001
  14. 网页微信公众平台登录电脑版
  15. Excel如何在姓名与字母之间加空格
  16. 阿童木实验校区-----少儿编程鼓励跨学科融合发展!
  17. Java语言发展概述
  18. 初学者-CSS思维导图(下)
  19. 【java有限状态机选型】
  20. 快速排序的枢轴(pivot)和边界

热门文章

  1. 打开360安全卫士时弹出错误:windows找不到文件 regedit.exe
  2. 爱情,最幸福的信仰!
  3. 单向链表与双向循环链表
  4. Linux基本命令的使用(一)
  5. 从最大似然估计开始,你需要打下的机器学习基石
  6. 没有加入泛型之前存在的问题
  7. VUE 数据字典展示
  8. Docker 问题集锦(32) - 云原生大趋势下的容器化技术现状与发展
  9. ifttt山寨火速出炉:如果云、如果就
  10. Netbackup(NBU)8.2安装配置