C++ ---- String类(一)

一、为什么要学习string类?

1、c语言中的字符串

在c语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,c标准库中提供了一些str系列的库函数,但是这些库函数和字符串是分离开的,不太符合OOP的思想(面向对象编程思想),而且底层空间需要用户自己管理,稍不留神还会越界访问。

2、auto和范围for

auto关键字

(1)在早期C/C++语法中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,后来这个不重要了。C++11中,标准委员会变废为宝赋予了auto全新的含义,auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推到而得。

auto使用规则:

-指针和引用:用auto声明指针时,auto和auto*等价;但是声明引用时必须写成auto&。

-多变量声明:同一行声明多个变量时,所有的类型必须相同,因为编译器只会根据第一个变量推到类型,再用该类型定义其他变量。

-函数参数:auto不能直接作为函数的参数类型(C++11/14不支持,C++20的Concepts等特性除外)

-函数返回值:auto可以作为函数的返回值类型(需要配合尾置返回类型或让编译器推导),但建议谨慎使用。

-数组声明,auto不能直接用来声明数组。

cpp 复制代码
//正确用法
auto x=10;//x被推导为int
auto* p=&x;//p被推导为int*
auto& r=x;//r被推导为int&
cpp 复制代码
//错误用法
void func(auto a){}//不能用auto作为函数参数(c++11/14)
auto arr[5];//不能用auto声明数组
auto a=1,b=2.0//同一行变量类型不同,编译错误

二、string的使用

1、string的构造

1、s1是默认构造(无参构造),空字符串(长度为0,内容为空);s2是带参构造函数,初始化s2;s3是拷贝构造;s4是子串构造

string(S2,1):

2、string的遍历

3、迭代器

迭代器是一种像指针一样的东西(想象成),(*it)--;的含义是让值--;++it1的意思是让这个迭代器往后走。

s1.end()是指向字符串的下一个字符。(也可以理解成迭代器区间是左闭右开的)。

迭代器是所有容器的主流遍历+修改方式。

对于vector也可以使用迭代器:

对于list也可以使用:

4、逆置reverse

迭代器的意义:

1、统一类似的方式遍历修改容器。

2、算法脱离了具体的底层结构,和底层结构解耦,算法独立模实现针对多个容器处理。

5、范围for("语法糖")

范围for特点:自动取容器里面的数据给m;自动判断结束;自动迭代。

相关推荐
布莱克6058 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发8 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc9 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Zenova EdgeOS10 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是10 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing0311 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)12 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..12 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert12 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
沫璃染墨13 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互