当前位置: 首页 > news >正文

从C++开始的编程生活(10)——string类基本语法和auto自动推导类型

前言

本系列文章承接C语言的学习,需要有C语言的基础才能学会哦~
第10篇主要讲的是有关于C++的string类基本语法auto自动推导类型
C++才起步,都很简单!!

目录

前言

string类

基本语法

①string的构造

②string::operator[ ]

③string的遍历(迭代器)

size()、length()和capacity()

clear( )

shrink_to_fit( )

at( )

push_back( )和append( )

insert( )

reverse( )

reserve( )

auto自动推导类型


string类

基本语法

①string的构造

#include<string>int main()
{//空字符串std::string s1;//字符串“qwertyuio”std::string s2("qwertyuio");//字符串“qwertyuio”的前3个,即“qwe”std::string s3("qwertyuio", 3);//字符串“xxxxx···xxx”,100个 xstd::string s4(100, 'x');//拷贝s2,从索引4开始拷贝3个字符,即“tyu”std::string s5(s2, 4, 3);//拷贝s2,从索引4开始拷贝全部,即“tyuio”std::string s6(s2, 4);//拷贝s2,从索引4开始拷贝20个字符,但是因为s2的长度小于20,所以只拷贝到末尾,即“qwertyuio”std::string s7(s2, 4, 20);return 0;
}

②string::operator[ ]

string类重载了操作符 [ ] ,使得string类可以像数组一样进行索引。

#include<string>class string
{
public:char& operator[](sizze_t pos){assert(pos < _ size);return _str[pos];}
private:char* _str;size_t _size;size_t _capacity;
};

底层代码大致如此。

③string的遍历(迭代器)

string s1(“hello world”);//①for循环
for(int i = 0; i < s1.size(); i++)
{cout << s1[i] << " ";
}//②迭代器
string::iterator it1 = s1.begin();
while(it1 != s1.end())
{cout << *it1 << " ";++it1;
}
cout << endl;//③反向迭代器
string::reverse_iterator rit = rbegin();
while(rit != s1.rend())
{cout << *rit << " ";++rit;
}//④范围for遍历
for(char ch : s1)
{cout << ch << " ";
}

遍历可以依靠for循环迭代器反向迭代器范围for进行。

Ⅰ.所有的容器都有定义迭代器iterator用于遍历容器,如string、vector、list等。
Ⅱ.s1的begin指向首字符 ‘ h ',end指向s1的字符’ /0 ‘
Ⅲ.反向迭代器reverse_iteratorrbegin指向最后一个有效字符rend指向第一个字符
范围for遍历自动取容器对象给左值自动++自动判断结束。但是没有办法修改容器自身的数据。底层依旧是迭代器。
Ⅴ.范围for也适用于数组

还有const迭代器const_literator迭代时不可以修改数据迭代时的指针为cbegin和cend,和begin和end一模一样。

size()、length()和capacity()

s1.size();
s1.length();
s1.max_size();
s1.capacity();

sizelength返回字符串长度,功能相同
max_size返回最大长度,不同的编译器和字长会有所不同。
capacity返回最大容量不包括’ /0 ‘
④对于string,size和length没有区别,但是对于其他的一些容器——例如树——是没有length的概念的,所以专门定义size获取容器大小,为了统一,就也给string定义一个size函数

clear( )

清空字符串

si.clear();

shrink_to_fit( )

字符串缩容

si.shrink_to_fit();

at( )

索引字符,区别于操作符 [ ] ,会抛出异常,而不是assert断言。

s1.at(10);

push_back( )和append( )

尾插。空间不足会扩容,扩容后尾插

s1.push_back('w');
s1.push_back('y');
s1.append('I am human');
//尾插入10个“!”
s1.append(10, '!');
//尾插入部分字符
s1.append(s1.begin() + 1, s1.end());

前者尾插字符,后者尾插字符串。

实际上,我们尾插更多地使用+=符号。而且扩容的方式,不同的平台和编译器可能不一样。

insert( )

头插

s1.insert('1');

reverse( )

逆置字符串

//全部逆置
s1.reverse()
//选择部分逆置
s1.reverse(s1.begin(1), s1.end())

reserve( )

预留保留空间供其使用,会额外扩容

s1.reserve(100);

实际上可能会多给你一点空间。

auto自动推导类型

根据给的值,自动推导数据类型,不用再自己写数据类型了。

auto x = 1;//int类型
auto y = 1.1//double类型
auto z = '1';//char类型
auto m = &x;//int类型
int& n = x; 
auto p = n;//int类型
auto& i = n//int&类型auto j;//报错

当我们要写一些名字很长的类型的时候,可以用auto,省事。

注意:
①想要auto推导引用类型要在auto后面加 &
必须要初始化,否则auto无法推导出确定的数据类型,会报错。
C++11才提供。
④和范围for融合,语法会十分方便。

for(auto ch : s1)
{cout << ch << " ";
}

⑤auto支持作为函数返回值类型,在C++20开始支持作为参数传入函数。这样使用auto要做好注释。

❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤


文章转载自:

http://Bqxi9kw1.rLwcs.cn
http://ERVT8L1d.rLwcs.cn
http://Un1uxGDP.rLwcs.cn
http://2zj7JMN0.rLwcs.cn
http://p84M1PR7.rLwcs.cn
http://HqtFZMDH.rLwcs.cn
http://P96Hs16m.rLwcs.cn
http://79qab1yd.rLwcs.cn
http://6ag6TPuP.rLwcs.cn
http://HVgojsZY.rLwcs.cn
http://RxGe57Qs.rLwcs.cn
http://jzs9RpWO.rLwcs.cn
http://ywgn3sCK.rLwcs.cn
http://bSVOYTcl.rLwcs.cn
http://PCghdXA0.rLwcs.cn
http://EkYtd7Pe.rLwcs.cn
http://IA4AigqE.rLwcs.cn
http://rgtlB66R.rLwcs.cn
http://jPUOTKYi.rLwcs.cn
http://i9TteXnM.rLwcs.cn
http://30RJoH4g.rLwcs.cn
http://639Lq1EL.rLwcs.cn
http://aKEqI5pa.rLwcs.cn
http://11jZIslC.rLwcs.cn
http://56QS3EOB.rLwcs.cn
http://ZEzES0ms.rLwcs.cn
http://LUXtqZMx.rLwcs.cn
http://j1G2Xg7F.rLwcs.cn
http://FNr7Yw9A.rLwcs.cn
http://R4egClep.rLwcs.cn
http://www.dtcms.com/a/385825.html

相关文章:

  • 深入理解MySQL主从架构中的Seconds_Behind_Master指标:并行复制优化与云原生实践
  • LAS点云格式转3DTiles全攻略:GISBox的高效实现与技术解析
  • AWS网站访问慢?CloudFront CDN加速配置教程 (2025)
  • AWS Certified AI Practitioner
  • Thomson Reuters 如何通过 AWS转型推动NET现代化
  • TDengine IDMP 基本功能——数据可视化(1. 趋势图)
  • 改进后的 Highcharts for React:更直观、更现代、更高效!
  • 运维安全05,iptables规则保存与恢复
  • 数据可视化 | 热力图理论与案例分析
  • 游戏开发公司应该要注意哪些网络安全问题
  • python 自动化从入门到实战-开发一个接口get post管理请求工具(9)
  • 认知语义学中的意象图式对AI自然语言处理中隐喻分析的影响与启示
  • Edge浏览器的自动化点击系统
  • 达梦数据库巡检常用语句
  • 基于Spring Cloud Gateway的全链路限流策略对比与实践指南
  • ​Oracle存储的实现:一个8KB块能存储多少行数据?​​一个块存不下一行数据会出现什么情况?
  • React学习教程,从入门到精通,React 组件事件处理语法知识点及使用方法(21)
  • ChatGPT 辅助重构:老旧 jQuery 项目迁移到 React 的协作日志
  • 嵌入式数据结构笔记五——循环链表内核链表
  • C++与Lua交互:从原理到实践指南
  • 状态管理:在 Next.js 中使用 React Context 或 Zustand
  • SeaweedFS深度解析(九):k8s环境使用helm部署Seaweedfs集群
  • uniApp开发XR-Frame微信小程序创建3D场景 (8) 刚体碰撞
  • NPM 常用命令
  • Windows 11 安装使用 nvm,Node.js、npm多版本管理、切换
  • AI Compass前沿速览:GPT-5-Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元3D 3.0
  • 苹果上架全流程指南 苹果应用上架步骤、iOS 应用发布流程、uni-app 打包上传 ipa 与 App Store 审核经验分享
  • 旗讯 OCR 识别系统深度解析:一站式解决表格、手写文字、证件识别难题!
  • strip()函数使用注意点
  • 好用的开源日志库:Easylogger解析与移植STM32