最新要闻
- AMD RX 7600公版卡曝光:双风扇也迷你可爱!国内会卖吗?|今日热讯
- 全国第一次!两条高铁的两座特大桥同时转体|焦点关注
- 大众CC开着开着天窗没了 车主:吓得腿发抖-世界聚焦
- 万科150亿元定增申请获深交所受理 当前快讯
- 独特多媒体旋钮设计瞩目:Keychron即将推出Q3 Pro SE机械键盘 观天下
- 环球时讯:锐龙7 7800X3D开盖“果奔”:60秒后 惨烈一幕出现
- 妇女能顶半边天下一句_我歌月徘徊下一句 全球信息
- 即时看!首批名额仅600名:魅族17系列迎来Flyme10内测招募
- 你的走路姿势 可能一直都错了!难看还伤腿
- 观速讯丨珍惜白菜价的电视吧 液晶电视面板价格继续大涨
- 武汉市三角路中学(关于武汉市三角路中学介绍)_世界今热点
- 499元新机竟敢对标苹果 看完真的有点香!
- 每日动态!凸六式扫把火了 商家剪坏扫把低价引流 男子将计就计下单
- 2尺2是多少毫米(2尺2多少厘米简介介绍)_今日热议
- 杭州现鸭屎香冰淇淋:味道揭秘!原来鸭屎香是一种乌龙茶
- 头条焦点:英国CMA或让步!微软收购动视暴雪新变动
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界报道:C++ Primer 5th 阅读笔记:字符串,vector 和数组
前言
C++ 定义了丰富的抽象数据类型。string
支持变长字符串。vector
支持变长集合。迭代器用于访问容器中的元素,比如,string
中的字符和vector
中的元素。string
和 vector
都基于更加原始的数组类型。
使用 using 声明来导入命名空间的名称
通过如下的语句,using namespace::name;
来直接导入命名空间下的指定名称到当前作用域下。导入多个名称需要编写多条 using
语句。
(资料图片仅供参考)
注意:头文件应该避免使用 using
声明,因为这可能导致命名冲突。
string
初始化 string
对象的几种方式:
string s1 ; // Default initialization; s1 is the empty string.string s2(s1) ; // s2 is a copy of s1.string s2 = s1 ; // Equivalent to s2(s1), s2 is a copy of s1.string s3("value") ; // s3 is a copy of the string literal, not including the null.string s3 = "value" ; // Equivalent to s3("value"), s3 is a copy of the string literal.string s4(n, "c") ; // Initialize s4 with n copies of the character "c".
直接初始化和拷贝初始化
直接初始化:通过向构造器直接提供参数来初始化对象。拷贝初始化:通过拷贝另一个对象的来初始化对象,这可能会涉及到类型转换。
一般情况下,直接初始化更高效和不容易出错。在初始值为字面量或者常量表达式时,也可以使用拷贝初始化。
string 支持的操作
string::size_type 类型
string
的返回值类型不是 int
而是 string::size_type
。
string::size_type
是无符号类型,能够存储任何字符串的大小。
字符串字面量
出于历史原因,为了保持和 C 的兼容,字符串字面量的类型不是 std::string
。
头文件
C++
标准库整合了 C
标准库。C
标准库的头文件格式为
。C++
对这些头文件进行了进一步的封装,封装后的头文件名为 c
。
cctype
range for(范围 for)
range for 语句提供了一种遍历序列中元素的方法。语法形式如下:
for (element : sequence) statement(s)
通过定义循环变量为引用类型,来修改序列中的元素。
下标操作符
我们可以通过下标操作符([]
) 访问特定的字符。下标操作符接受 string::size_type
的值作为参数。下标越界是未定义的行为。
vector
vector
是一组相同类型的对象的集合。集合中的每一个对象都关联了一个索引。vector
是一个类模板。C++ 有类模板和函数模板。编写模板需要对 C++ 有深厚的理解。模板本身不是类或者函数。模板用于生成类或者函数,这个过程叫做实例化(instantiation)。我们需要提供额外的信息来帮助模板进行实例化,这些额外信息包含在一对尖括号内,尖括号位于模板名称之后。vector
的尖括号内指定的包含的对象的类型。在早期中的 C++ 中,如果 vector
的对象类型也是 vector
,我们需要在两个右尖括号之间插入一个空格。比较 vector
(新)和vector
(旧)。
vector 初始化
列表初始化
如果没有提供初始值,vector
会根据数据类型进行默认初始化。
上面的初始化形式存在两个局限性:
- 一些类的初始化,必须显式地提供初始值,没有默认初始化。
- 我们只能通过直接初始化来进行。下面的复制初始化是非法的表示。
汇总
列表初始化和直接初始化
如果花括号中的元素类型和 vector
的元素类型不匹配,编译器会尝试用这些值去构造 vector
对象。
vector 增长很高效
我们通常不需要指定 vector
的大小。
添加元素的注意事项
在使用范围 for
循环时,不要向 vector
中添加元素。
vector 支持的一些其他操作
如果元素支持关系运算符,vector 也支持关系运算符。如果元素支持相等运算符,vector 也支持相关运算符。
vector 下标/索引
vector
的索引对应的类型为 size_type
。为了使用 size_type
,我们必须提供元素的类型,
注意:下标操作符不会增加元素,下标操作符只能获取已经存在的元素。
尝试访问不存在的元素,是一种未定义的行为(编译器无法检测到)。是一种常见且危险的程序错误。这可能会导致缓冲区溢出(Buffer Overflow)。这个错误常常会引起安全性的问题。如果可能,尽可能使用范围 for
来替代索引的使用。
迭代器
迭代器提供了一种间接访问容器元素的方式。我们可以通过迭代器来获取一个元素,或者从一个元素移动到另一位元素。一个合法的迭代器,要么表示一个元素,要么表示最后一个元素的后一位;除此之外的其他迭代器都是非法的迭代器。
begin()
返回表示第一个元素的迭代器对象。end()
返回表示超过最后一个元素的迭代器对象。
迭代器支持的操作
注意:解引用一个无效的迭代器或者一个超出末端的迭代器会导致未定义的行为。
迭代器的类型
- 一般迭代器:可读可写
- const 迭代器:可读不可写
如果容器本身是 const,那么只能通过 const 迭代器进行访问。begin()
函数也只会返回 const_iterator
类型的迭代器。
如果我们不想对元素进行修改,我们应该尽可能使用 const 迭代器。C++ 11 引入了两个新的函数:cbegin()
和 cend()
。
-> 操作符
如果我们通过迭代器访问对象的成员。我们可以通过这样的语句,
(*it).empty()
注意:上面的语句不等价于
*it.empty() // error
因为 *
的优先级比 .
低。
箭头运算符 ->
合并了解引用和成员访问运算符。也就是说 it->mem
等价于 (*it).mem
。
注意
改变容器大小的操作会使得迭代器无效化。
vector 和 string 的迭代器支持的一些其他操作
除了一些通用的迭代器操作,vector
和 string
的迭代器还支持一些额外的操作。这些操作也被称为迭代器算术操作。
iter1 - iter2
返回的类型为 difference_type
,这是一个有符号数,因为相减的结果可能是一个负数。
数组
数组包含了一组相同类型的未命名对象。数组的大小固定。数组通常拥有更好的运行性能。数组没有 vector
灵活。数组是一种复合类型。复合类型包括数组类型、引用类型、指针类型、类类型、函数类型等。数组的大小必须大于 0。数组的元素数量是数组的一部分,所以必须在编译阶段就知道数组的大小。数组的大小可以是字面量或者一个常量表达式。数组内的元素都会进行默认初始化,但是函数内的内建类型的数组的值是未定义的。因为引用不是对象,没有包含一组引用的数组。
数组可以使用列表初始化。数组大小必须满足:
- 必须大于列表中的初始值个数;未指定初始值的元素会进行 值初始化。
- 留空。
值初始化:内建类型会被初始化为0,类类型会使用默认构造器进行初始化。
字符数组可以使用字符串字面量进行初始化。字符串字面量使用 \0
(零字符)结尾。
数组不支持赋值拷贝。(不可复制!)
复合数组声明:
数组支持范围 for 循环和下标操作符。下标操作符中的值的类型为 size_t
。size_t
是一个平台相关的无符号变量。size_t
和 unsigned int
有所不同,size_t
的取值范围是目标平台下最大可能的数组尺寸。一些平台下 size_t
的范围小于 int
的正数范围, 又或者大于unsigned int.size_t
定义在 cstddef
。
在大多数(不是所有)情况下,数组名等价于指向对一个元素的指针。
这种说法在以下两种情况下不成立:1、sizeof(a);2、&a;来源:c中,数组名跟指针有区别吗?
对于数组, auto 会返回指针类型。对于数组,decltype 会返回数组类型。
指针是迭代器的一种。
超出末端指针可以通过 end()
函数来获取。这个函数定义在 iterator
文件头中。
指针支持这些算数操作:
两个指针相减的结果的类型是 ptrdiff_t
,ptrdiff_t
是一个平台相关的有符号类型,被定义在头文件 cstddef
。
空指针和非数组的指针可以使用算数操作。
指针可以使用下标操作符,指针的下标(内建下标操作符——没有经过重载的)可以是负数。
注意:
vector
和string
的下标操作符不可以是负数。
C 风格的字符串
尽量避免在 C++ 中使用 C 风格的字符串。
C 风格的字符串的一组函数
C 风格的字符串必须以零字符结尾,否则会导致程序运行错误。
不能使用比较运算符来比较C 风格的字符串。
而要使用 strcmp
函数。
C 风格的字符串函数很容易导致安全问题,比如拼接字符串的目标字符数组大小不足。
推荐:对于绝大部分程序,请使用 string
类型。
接入旧代码
很多早期的 C++ 代码没有使用 string
或者 vector
。
可以通过以下的方式来混用 string
和 C 风格的字符串(主要是把 C 风格字符串转换成 string
类型):
- 可以将字符串字面量作为
string
的初始值; - 可以将 C 风格的字符串变量赋值给
string
变量; - 可以使用
+
或者+=
运算符,对 C 风格的字符串和string
变量 进行拼接。
我们可以通过 c_str
使得 string
变量返回一个 C 风格的字符串(指针,指向字符数组的第一个字符)。指针的类型为 const char *
,这阻止我们修改这个字符数组的内容。c_str
返回的字符数组不保证长期有效,如果后面我们修改的 string
变量的值,可能会导致c_str
返回的字符数组失效。
我们可以使用数组来初始化 vector
变量:
建议:尽量使用库类型(如,string
和 vector
)来替代数组。
多维数组
C++ 中没有多维数组,实际上这些“多维数组”是数组的数组。
初始化多维数组的方式:
如果下标运算符少于数组的维度,则会返回一个子数组。
通常使用一对嵌套的 for
循环来遍历二维数组的元素:
可以使用范围 for
循环来替代普通的 for
循环:
多维数组的范围 for
循环,外层 for
循环必须是引用类型,否则会将数组类型转换指针类型,指针类型是无法被用于范围 for
循环的。
下面的代码错误:
我们可以使用指针来遍历多维数组:
关键词:
-
世界报道:C++ Primer 5th 阅读笔记:字符串,vector 和数组
前言C++定义了丰富的抽象数据类型。`string`支持变长字符串。`vector`支持变长集合。迭代器用于访问容器中
来源: 世界报道:C++ Primer 5th 阅读笔记:字符串,vector 和数组
焦点热文:杂项·入门
AMD RX 7600公版卡曝光:双风扇也迷你可爱!国内会卖吗?|今日热讯
全国第一次!两条高铁的两座特大桥同时转体|焦点关注
大众CC开着开着天窗没了 车主:吓得腿发抖-世界聚焦
万科150亿元定增申请获深交所受理 当前快讯
独特多媒体旋钮设计瞩目:Keychron即将推出Q3 Pro SE机械键盘 观天下
环球时讯:锐龙7 7800X3D开盖“果奔”:60秒后 惨烈一幕出现
妇女能顶半边天下一句_我歌月徘徊下一句 全球信息
即时看!首批名额仅600名:魅族17系列迎来Flyme10内测招募
你的走路姿势 可能一直都错了!难看还伤腿
观速讯丨珍惜白菜价的电视吧 液晶电视面板价格继续大涨
武汉市三角路中学(关于武汉市三角路中学介绍)_世界今热点
499元新机竟敢对标苹果 看完真的有点香!
每日动态!凸六式扫把火了 商家剪坏扫把低价引流 男子将计就计下单
SpringBoot利用自定义注解实现多数据源
2尺2是多少毫米(2尺2多少厘米简介介绍)_今日热议
杭州现鸭屎香冰淇淋:味道揭秘!原来鸭屎香是一种乌龙茶
头条焦点:英国CMA或让步!微软收购动视暴雪新变动
天天关注:《英雄联盟》2023 MSI决赛JDG对战BLG!首发名单出炉:萍乡第一中单之争
青沼英二坦言自己老了:《王国之泪》将我逼到极限
银川市为500名女童免费接种HPV疫苗
IMU 积分进行航迹推算 天天快报
Win7经典“顽疾”:微软确认Win11硬盘可能被错误识别|全球今热点
“挖呀挖”黄老师开始转型:参与文旅宣传!曾否认辞职带货
焦点热文:小李子新片《花月杀手》M站91分 多家媒体给出满分
格致男排,夺冠! 每日速递
CesiumJS 源码杂谈 - 时间与时钟系统_前沿热点
《利益区间》冲击金棕榈大奖
4999元起!小牛MQiL电动两轮车开售:顶配能骑170km_世界动态
对话盛希泰:“专精特新”企业给二三四线城市带来发展机会_世界视点
快报:河南局地大暴雨!女子家中厨房窗户被暴风雨整个吹掉:庆幸无人受伤
每日关注!李想:汽车行业规模要求太苛刻 更容易出问题的不是成本而是销量
04-多路选择器
快报:我国南海发现两处古代沉船
我国深海考古重大进展!首次发现大型古代沉船:水下第一视角太壮观 环球热文
因为AI 让80%的职业原画师下岗
帮助Linux管理员简化任务并实现自动化的七大工具
自己办理深圳创业补贴难吗?创业开饭店有补贴吗深圳
爱驰汽车被曝经营困难:开通员工自费交社保通道 焦点热讯
中国取代日本成全球第一大汽车出口国 俄罗斯为最大买家|天天热门
React闭包陷阱
每日观点:当日快讯:沙特外交大臣表示阿拉伯国家将继续在俄乌冲突中维持中立
全球快报:【财经分析】全球贸易增长正在恢复 应继续加强多边贸易合作
环球短讯!近视可用 特步0~700度专业大框泳镜狂促:12元包邮
店员称衣服掉地上摔个洞需赔款:最终结果让网友不淡定 速看
如何保存新鲜活虾 活虾怎么保存? 全球即时看
全球微动态丨体验阿斯顿·马丁DBX707 看看超跑品牌是怎么做SUV的
比亚迪首家全品牌体验中心开业:几万块到一百万的车全都有 当前简讯
第一批升级iOS 16.5正式版的用户被坑了!_要闻速递
学系统集成项目管理工程师(中项)系列23b_信息系统集成及服务管理(下)
【爬虫数据集】滇西小哥YouTube频道TOP10热门视频的热评数据,共2W条!_世界速看料
又有基金公司宣布:APP停止运营!_环球快看
清华大学女生获选美冠军 网友:全方位优秀
年轻人第一辆后驱SUV 长安深蓝S3预售:16.99万起-热议
全球信息:雨前高山春鲜 谢裕大珍珠绿茶60克到手29元
万达集团紧急声明!
03-点亮LED灯
热搜第一!BLG晋级 LPL提前锁定MSI三连冠 每日信息
全面了解华为全屋智能4.0:体验质变 最新快讯
母亲5点帮女儿排队领证结果走错地方:白排了一个小时队
当前快看:河海大学与华中师范大学签署战略合作协议
无论多少次,还是会为粉色疯狂心动!!!
文心一言 VS 讯飞星火 VS chatgpt (19)-- go语言的slice和rust语言的Vec的扩容流程是什么? 世界热文
阴阳师×GARNiDELiA决定展开合作 或为《极乐净土》高清重制版
索尼宣布将与WNBA达成合作伙伴关系 探索各种营销机会
环球今亮点!年终工作总结会议流程_年终工作总结会议通知
NASA发出警告称巨型小行星正在接近地球 大小为纽约地标自由女神像的两倍
网易旗下Jackalope Games宣布更名 正在开发一部基于“战锤”IP的游戏
苹果App商城现已有178万个应用程序 为有意义的统计数据
,影片《人生路不熟》票房突破9亿元大关 由马丽与乔杉等人主演
电视剧《仙剑奇侠传六》官微发布新海报 由许凯和虞书欣担任
顺丰控股公布4月快递物流业务经营 业务量同比增长29.59%
差价上千元该怎么选?13代酷睿i5和i7实测性能对比
华为把屏幕边框做到了1mm!畅享60 Pro即将开卖:1499元
国网东营供电公司开展全市电力设施和电能保护集中宣传活动
从350nm升到4nm 25年来AMD CPU性能已提升910倍
女子动车上提醒男子小声打电话被怼:你凭什么说我
520当天一女子逼停汽车泼粥骂渣男引围观:网友吐槽不该糟蹋粮食
由于半导体消费持续低迷 三星半导体将推迟平泽工厂4nm生产线设备投资
2023年DPC中国联赛夏季赛开战 Aster战队首秀大放异彩赢得首胜
阅读笔记:Sybilla DLT任务重启判定系统 焦点快看
首款天玑9200旗舰!vivo X90降价:256GB版3799元到手
网红三千哥直播PK饮酒过量去世 友人:喝了至少四瓶|当前通讯
英伟达RTX 4060 Ti显卡降临:关键参数已曝光 就差价格了
初三下册月考复习:第二单元知识点-天天快播报
Java生成二维码及条形码工具
python中的装饰器原理和作用 焦点热议
23款奔驰GLC评测_全球观焦点
有你家吗?杭州人均存款达16万元:全国住户存款最强8大城市 每日消息
华为笔记本性能怪兽!MateBook 16s下周首销:i7+1TB仅7999元 全球即时看
今日精选:20年来x86巨变 Intel将精简CPU架构:转向纯血64位
女子为骗男友结婚定制美颜假身份证引热议:网友感慨太假太美了 焦点报道
情侣筷子卖22元单身筷1元 超市:已下架-环球看点
双鸭山市气象台发布大风蓝色预警【IV级/一般】【2023-05-20】 全球热文
每日看点!Natasha 插件化之dll
天天最资讯丨暴雪又搞砸了 老外批《守望先锋2》太失败:浪费4年开发
桌面RTX 4070玩游戏 显示器选2K还是4K?来看对比实测 全球热推荐
远离元宇宙后 扎克伯格财富暴涨3000亿 全球最多!|全球新视野
小米两大技术接入联发科平台!卢伟冰:天玑芯片影像蜕变