前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >c++:string(一)

c++:string(一)

作者头像
用户11290664
发布2024-11-26 14:11:05
发布2024-11-26 14:11:05
720
举报
文章被收录于专栏:学习学习

一string类

1C语言中的字符串

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户 自己管理,稍不留神可能还会越界访问。 姓名。地址,

2C++中的string

在使用string类时,必须包含#include头文件以及using namespace std; auto和范围for 我们马上在下文会提到这两个特别好用的用法,希望大家注意

string类本身是basic_string typedef的过来的

basic_string本身是一个模板

注意事项 (1)c++中的string类是包含在string头文件里的,所以要包含string (2)容器和类里面一般会有接口,包括一些写好的函数和特殊定义(比如size,capacity)都叫接口 (3)c++一开始设计的时候没有容器的概念,string与后面的容器有一些不一样。具体表现是string的 接口非常多而杂,有些甚至重复定义,这是为了与后面的迭代器保持一致,但是以前多的不能删,后面c++的内容也只能兼容string.

二遍历

1[ ]

这里[ ]属于element access(元素获取)个人认为有点像访问的关键字

这里设置的非常巧妙,本来string类不能像数组一样访问下标直接访问或者遍历全部元素的,但是我们可以认为规定位置,然后返回进行访问,这样起到了数组下标访问问的效果 这样我们就可以进行遍历

2迭代器

迭代器差不多类似于指针,但是底层不同,string的迭代器类似于指针,下面it1类似于指针,cout*it1类似于解引用。 但其他的容器不一定。

迭代器差不多类似于指针,但是底层不同,string的迭代器类似于指针,但其他的容器不一定。

反向迭代器,从end往begin输出

3const迭代器

const对象不能使用普通迭代器

看上面的const对象如果像进行定义就要进行const修饰迭代器,这也是权限的放大 。

4范围for

我们以前遍历一些东西都要用(for int i=xx;i<xxx;i++)但是我们学了范围for可以方便的定义遍历 for(xx a:xxx) 是吧xxx从头到位赋值给a,然后一个个输出,编译器自动识别开头和结尾 、 xx是定义的类型

5auto

四种迭代器iterate,const iterate,reverse_ iterate,const reverse_ iterate 然后可以定义后直接 auto xxx=xxx.begin();这样不用指明很长的类型 然后上面的for遍历for(xx a:xxx) xx可以写成auto,自动识别xxx的类型给auto

但是不会推出引用,要自己写一个&

现在auto引用时定义迭代器可以短一点

修改的时候要加&,因为是把s1一个个赋值给ch然后输出。下次cout时候就没用了, 但是一开始赋值给别名就进行前置修改了。

6总结

三种遍历方法,[],迭代器,范围for 范围for底层是迭代器,所以只有容器中支持迭代器的才支持范围for 因为数组底层和迭代器差不多,所以也支持范围for auto是一个自动识别的类型,在定义迭代器类型一般是很多的字母,可以用auto

三String的尾插

1size和length

推荐size 因为其他容器也兼容size,这就二中注意事项中string臃肿的部分

2max_size,capacity和clear

这三个都是接口,max_size是最大下标, capacity和栈中一样是空间可以扩容, clear是把size直接搞成0。

3访问接口

at,[]

我们在遍历中知道[ ]怎么访问的了 下面我们介绍at

at和[]的不同是如果访问到非法处理方式不一样,at要抛出异常,然后捕获what(),如图:

[]异常是:

4尾插字符和字符串

尾插字符是push_back 尾插字符串是append

5 append的重载

我们不仅可以用接口,接口其实也有许多重载,这里我们就不细说了

三string的扩容问题

(1)怎么扩容

根据编译器的不同扩容方式不一样,这里是vs2022,它在后面一般是1.5倍的扩容。

(2)reserve和reverse

reverse是一个扩容接口(函数),反正我们如果提前知道要扩容多大可以直接提前reverse,他会提前开好一个比较大的空间,这样就不要频繁的扩容,在堆上开空间,

reverse有反转的意思,一般命名时候用到,上文的反向迭代器就加了reverse的前缀。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一string类
    • 1C语言中的字符串
    • 2C++中的string
    • 二遍历
    • 1[ ]
    • 2迭代器
    • 3const迭代器
    • 4范围for
    • 5auto
    • 6总结
    • 三String的尾插
    • 1size和length
    • 2max_size,capacity和clear
    • 3访问接口
    • 4尾插字符和字符串
    • 5 append的重载
    • 三string的扩容问题
    • (1)怎么扩容
    • (2)reserve和reverse
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档