c.begin();           返回指向容器最开始位置数据的指针

c.end();             返回指向容器最后一个数据单元+1的指针

如果我们要输出最后一个元素的值应该是 *(--c.end());

有小伙伴可能不太理解为什么这么定义?这样定义有以下几个好处:

  1. 数组的空间占用等于终点指针减去起点指针;
  2. 数组的终点指针减去起点指针之差,再除以单个元素的长度,等于数组元素的个数;
  3. 判断是否到尾部只要!=end就行了;
  4. 判断空区间很简单begin()==end();

vector源码:

 const_iteratorbegin() const _GLIBCXX_NOEXCEPT{ return const_iterator(this->_M_impl._M_start); }iteratorend() _GLIBCXX_NOEXCEPT{ return iterator(this->_M_impl._M_finish); }boolempty() const _GLIBCXX_NOEXCEPT{ return begin() == end(); }

从STL源码上来看,end()返回的是_M_finish,而_M_finish = _M_start + n(n为元素对象的个数),begin() == end()可以直接判空,而c(c++)语言中,数组都是从下标为0处开始,所以end()返回的自然是最后一个节点的后一个节点。这也是计算机语言的和谐之美。

set:

#include <bits/stdc++.h>
using namespace std;
int main()
{set <int> s;s.insert(5);s.insert(7);s.insert(2);s.insert(1);set<int>::iterator it;for(it = s.begin(); it != s.end(); it++)cout << *it << endl;cout << "容器中第一个元素是:" << *s.begin() << endl;cout << "容器中最后一个元素是:" << *(--s.end()) << endl;
}

vector:

#include <bits/stdc++.h>
using namespace std;
int main()
{vector <int> v;v.push_back(5);v.push_back(7);v.push_back(2);v.push_back(1);vector<int>::iterator it;for(it = v.begin(); it != v.end(); it++)cout << *it << endl;cout << "容器中第一个元素是:" << *v.begin() << endl;cout << "容器中最后一个元素是:" << *(--v.end()) << endl;
}

c++ stl库中begin()和end()的区别相关推荐

  1. C++11 中STL库中新增内容

    C++ 11一个比较显著的变化是以前boost库中的一些函数被正式标准化合入到STL中了,本文就简单的介绍一下. 引用包装器(Reference Wrapper) 当模板函数参数为泛型类型的时候,无法 ...

  2. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  3. C++STL库中不可或缺的部分—string(模拟实现)

    前文 大家好,本篇文章主要是讲解一下 string一些常用接口的模拟实现. 众所周知,在日常生活中,字符串无处不在,如 ''just do it'',''中国'',''一坤年''等,想要在计算机上将这 ...

  4. python自带的sum()函数和numpy库中的sum()函数的区别

    在学习<机器学习实战>一书的第十章时,对 return np.sqrt(sum(np.power(vecA - vecB, 2))) 这样一条语句输出的结果老是不对,明明想要输出的是对两个 ...

  5. C++STL库中的map容器

    map简介 map是STL中的一个关联式的容器,可以建立key(first)和value(second)一对一的联系,由key映射到value. map内部自建了一棵红黑二叉树,可以对数据进行自动排序 ...

  6. SDNUOJ 1703.字谜|STL库中map的使用/map映射

    题目 Description 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入的大小写.满足条件 ...

  7. 简单实现STL库中的容器vector

    一.简要说明 本篇博客实现的容器仅仅可存放任意基本数据类型的元素,但是还没有实现容器可存放容器类型的元素(类似于多维数组). 二.代码实现 2.1 数组声明 #define INCREASEMENT ...

  8. 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

    lower_bound算法返回第一个大于等于给定值所在的位置.设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置.当start和last指向相同位置 ...

  9. STL库中的优先队列

    priority_queue是一个优先队列,优先级高的最先出队,默认最大值优先.内部实现为堆,因此出队和入队的时间复杂度均为O(logn).可以自定义优先级控制出队顺序优先队列不支持删除堆中指定元素, ...

最新文章

  1. 【LeetCode】142 - Linked List Cycle II
  2. 英特尔推深度学习加速工具包OpenVINO,布局边缘计算,发力物联网业务
  3. 【mysq】远程访问权限(允许远程连接)
  4. SAP UI5 应用开发教程之四十 - 如何制作包含了 component-preload.js 在内的 SAP UI5 发布版本
  5. Hybris ECP里Customer对应的数据库表
  6. 全国计算机等级考试题库二级C操作题100套(第18套)
  7. python 点_Python中的方括号和点符号有什么区别?
  8. Internet路由结构学习心得二:通告汇聚和具体路由影响AS入流量
  9. 构造函数必须是public吗_谈谈 constructor 的private和public
  10. 通过CentOS克隆虚拟机后发现无法启动网卡或无法上网的解决办法
  11. 一个敲有趣的R语言拼图工具
  12. 接口测试一般怎么测?接口测试的流程和步骤~
  13. openSUSE-Leap-15.4-DVD-x86_64的日常使用设置
  14. mini计算机结构,简单拆机看内部构造_苹果 Mac mini MGEN2CH/A_台式电脑评测-中关村在线...
  15. 华为外包软件公司集体罢工!
  16. MySql必知必会学习
  17. 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码
  18. 面试官十年面试经验总结
  19. Java开发必须会的技能!java页面导出数据到excel
  20. 【汽车安全】ISO26262概要

热门文章

  1. html+ol+从+开始,从零开始的全栈工程师——html篇1.5
  2. IWEBSHOP开发一
  3. 1996年计算机应用初级培训班,注重教学与实践,提高计算机应用能力(1)
  4. 从卖电脑到卖服务应从培训CEO开始
  5. JAVA基础学习(十五)--集合二--TreeSet和泛型
  6. python 实现文件哈希值计算
  7. Bpmn.js自定义文件说明
  8. 使用Spring Boot Thin Launcher 打包Spring Boot项目,jar包瘦身
  9. Mac添加ssh config配置,快速登录Linux系统
  10. Autodesk Mudbox 2019 for Mac(三维雕刻软件)