C/C++知识点之C++ Primer-访问元素
小标 2018-08-27 来源 : 阅读 1155 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C++ Primer-访问元素,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C++ Primer-访问元素,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

一、顺序容器类型回顾:

vector 可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。
deque 双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。
list 双向链表。只支持双向顺序访问。在list中任何位置进行插入/删除操作速度都很快。
forward_list 单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快。
array 固定大小数组。支持快速随机访问。不能添加或删除元素。
string 与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快。

二、访问元素:
       如果容器中没有元素,访问操作的结果是未定义的,因此访问之前一定要”检查容器是否有元素“!

       包括array在内的每个容器都有一个front成员函数,而除forward_list之外的所有容器都有一个back成员函数。这两个操作分别返回首元素和尾元素的引用。

// 在解引用一个迭代器或调用front或back之前检查是否有元素
 if (!c.empty())
 {
  // val 和 val2 是c中第一个元素值的拷贝
  auto val = *c.begin(), val2 = c.front();
 
  // val3 和 vla4 是c中最后一个元素的拷贝
  auto last = c.end();
  auto val3 = *(--last); // 不能递减forward_list迭代器
  auto val4 = c.back();  // forward_list 不支持
 }

此程序用两种不同方式来获取c 中首元素和尾元素的引用。直接的方法是调用front和back。而间接的方法是通过解引用begin返回的迭代器来获得首元素的引用,以及通过递减然后解引用end返回的迭代器来获得尾元素的引用。
        该程序有两点值得注意:迭代器end指向的是容器尾元素之后的(不存在的)元素。为了获取尾元素,必须首先递减迭代器。 另一个重要之处是,在调用front和back(或解引用begin和end返回的迭代器)之前,要确保 c 非空。如果容器为空,if 中操作的行为将是未定义的。

三、访问成员函数返回的是引用:
         在容器中访问元素的成员函数(即,front、back、下标和at)返回的都是引用。

四、下标操作和安全的随机访问:
        at 总是会做边界检查,下标运算符(operator[] )不做边界检查。
        提供快速随机访问的容器(string、vector、deque和array)也都提供下标运算符。下标运算符接受一个下标参数,返回容器中该位置的元素的引用。给定下标必须”在范围内“(即,大于等于0,且小于容器的大小)。保证下标有效是程序员的责任,下标运算符并不检查下标是否在合法范围内。使用越界的下标是一种严重的程序设计错误,而且编译器并不检查这种错误。
        如果我们希望确保下标是合法的,可以使用at 成员函数。at 成员函数类似下标运算符,但如果下标越界,at 会抛出一个out_of_range异常:
  vector<string> svec; // 空vecotr
 cout << svec[0];     // 运行时错误:svec中没有元素
 cout << svec.at(0);  // 抛出一个out_of_range 异常    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved