当前位置:首页 » 《我的小黑屋》 » 正文

【C++】string类(介绍、常用接口)

19 人参与  2024年03月21日 14:42  分类 : 《我的小黑屋》  评论

点击全文阅读


?个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
? 系列专栏:http://t.csdnimg.cn/eCa5z

9efbcbc3d25747719da38c01b3fa9b4f.gif

目录

前言

string类的常用接口说明

string类对象的常见构造

​编辑

 string字符串的遍历(迭代器)

下标加[](operator[])

 迭代器iterator(begin、end)

范围for

 容量操作

 size、length、max_size、capacity

shrink_to_fit 

reserve 

 resize

at 



前言

    ? hello! 各位铁子们大家好哇。

             今日更新了string的内容
    ? 欢迎大家关注?点赞?收藏⭐️留言?

在使用string类时,必须包含#include头文件以及using namespace std;

string类的常用接口说明

string类对象的常见构造

0ee2b9753c7643fa88c69cac07279d99.png

b9bde6d0348a4da296b2d0e95510e389.png

 第一行是构造一个空字符串。第二行是构造输入的字符串。第三行是拷贝构造。第四行是从下标为5开始的三个字符构造,当第三个参数大于末尾下标时,或者当第三个参数不写时,就会把剩下全部的字符用来构造。

9cf5a6a47a424f948885a5f606661033.png

上图中,s3是用n个字符c构造。s5是从字符串中,用前3个构造。 s0=s3是赋值。

 string字符串的遍历(迭代器)

下标加[](operator[])

045c8e58f53d419eb229d086ed218142.png

0c1c9c01e64e430b8c6248bd320f451b.png

在c++中,字符串后面是有'\0'的。但是size是不会计算'\0'的。如上图。 

648fafe24064412fa18808b1acf84abb.png

6cd289d72e964465ad24bab47b37eb97.png

下标加[]的方式,不仅可以读取,还可以修改。 

我们还发现,他有两种重载形式(this指针不同):

410eaee1337b4bc28396f630385ac203.png

如果是const修饰的,就不能修改,只能读。 

 迭代器iterator(begin、end)

9c61b2e8ac644b59acf0148c33d06324.png

6c766333a2ee496298f61d29fb20fcaf.png

迭代器iterator是一个类型,是定义在string类里面的,需要指定类域才能用。end()是最后一个有效字符的下一个位置,即‘\0’。begin()是起始位置。他模拟指针的行为,但他不是指针,因此他也可读可写。

反向迭代器(rbegin、rend)

b34980b304cb4c22a3f820d4adbeb188.png

b0b5e6cd77184f11b077cbfdf4bb5362.png


c0009df094a04cbe9b395cefd9df6079.png

c60047f04e044bf59a0d30db471ccec5.png

当我们的对象是const对象,我们要用对应的const的iterator。end也是如此。用const修饰后,就不能修改了,只能读,不能写。如果是反向的,就是    string::const_reverse_iterator 

范围for

468103ea678445129befa0e2be666966.png

范围for遍历,底层其实也是迭代器。写起来会比较简洁。 

 容量操作

 size、length、max_size、capacity

3f7d019472ce48869e5449c18d12e895.png

size和length是一样的,一般使用size。 max_size就是最大的长度,实际上没什么意义。capacity就是容量。

2b5bf89019c04229b8a8d117914c2f8c.png

capacity实际不包含'\0'占用的空间的,虽然写着15,但实际是16。31实际是32。刚开始是两倍的扩,后面就是1.5倍的扩。但是扩容机制是不确定的。 

5e708e7454ba42229d5c2bad7d90e58b.png

clear就是清除数据,但是清不清空间是不确定的。 

shrink_to_fit 

如果想清理空间,就要缩容:

634422ffdd384823a880f4d0aa4de3b2.png

4f1f3e18b02b407892a42691c2b3252a.png

 缩容会把空间减少到size的大小。清空时,最小的大小是16。 


reserve 

我们插入数据,空间不够,会自动扩容。如果想要手动扩容,就要用reserve。 

ed104af7144540b88013e7e16f0c720e.png

2315d1c9fdc044178d8cbb4f71e3bf0d.png

 如果我们知道大概需要多少空间,可以请求空间。这样就不需要频繁的扩容,频繁扩容会降低效率。不过我们申请100个,它不一定就给100个,可能会给更大的空间。如果我们给的比当前的capacity小,他就不会生效。只有比当前capacity大,才会扩容。


 resize

54c10b38304041fcb07272c415b2c487.png

871aa829a2fd4bde83af01c47c337419.png

294eb7bceb8b4d3cbd683b2910a962a9.png

821f3ffa194546bb89eebbfb0d6199f3.png

 resize是改变size的大小。如果改变后的大小比当前小,就删除。如果大于当前size,小于capacity,就插入。如果大于capacity就扩容+插入。resize有两个版本,如果第二个参数不写,就默认插入'\0',如果写了,就插入该字符。


at 

af8702f8e3fe43a9bf9e52261bee26b3.png

c02fe499479f4a97aeecc5a48bc4f81a.png

at和operator[]的使用基本一样。区别在于越界报错时,[]会报断言错误,at会报没异常的问题。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/82982.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 她的记忆停留在了最爱初恋的那年许欣柔楚临川完本_她的记忆停留在了最爱初恋的那年(许欣柔楚临川)
  • 全书浏览假千金的实习生男友霸占我办公室,我反手让他们倾家荡产(顾家明)_假千金的实习生男友霸占我办公室,我反手让他们倾家荡产(顾家明)全书结局
  • 童养夫让我给他的新欢出修复费(林嘉芝林思雅)_童养夫让我给他的新欢出修复费林嘉芝林思雅
  • 全文资助生女婿让我给他白月光付三千万月子中心钱(宋清玉宋雅)列表_全文资助生女婿让我给他白月光付三千万月子中心钱
  • 碎在时光里的谎言喻景宴秦明月完本_碎在时光里的谎言(喻景宴秦明月)
  • 旧爱剜心吻成灰席鄢之岑秋全书免费旧爱剜心吻成灰席鄢之岑秋全书免费
  • 结婚六年丈夫不碰我谁知儿子亲爹是寡头(纪清言傅司砚),结婚六年丈夫不碰我谁知儿子亲爹是寡头
  • 老公想换掉我的男胎,我笑他自不量力(宋薇于继业)_老公想换掉我的男胎,我笑他自不量力宋薇于继业
  • 给太子下了噬心蛊后,皇后找上门(小夭赵劼)全书浏览_给太子下了噬心蛊后,皇后找上门全书浏览
  • 豪门绝嗣!带球跑的夫人回来了!(谢长宴慕清杳)_豪门绝嗣!带球跑的夫人回来了!谢长宴慕清杳
  • 完美身材(李朵林之晴)_完美身材李朵林之晴
  • 离婚后,我和快穿系统绑定(白意秋陈荣周立慧)_离婚后,我和快穿系统绑定(白意秋陈荣周立慧)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1