Cpp学习——string(1)

news/2025/1/15 13:10:50/

目录

​编辑

一,string简介

 二,string的使用

1.string对象的构造方式

2.string的遍历

1.for普通遍历

2.迭代器的方式遍历

3.string中的函数


 

一,string简介

要学习string就要先知道string是个啥。string是个啥呢?string其实就是标准库里面的一个容器,一个数据结构。记住,这是一个标准库里面的容器,但是不属于STL里面。关于string首先你要先了解以下几点:

1.string其实可以简单的理解为一个管理字符串的数组。

2.string的头文件是string.h。

3.string的原型是basic_string<char>是一个类模板模板,只不过是被tepdef成了string。

 二,string的使用

1.string对象的构造方式

string对象的构造方式分为两种:

1.无参构造

string s1;

这就像定义一个对象一样。

2.有参的构造

 string s2("hello world!");string s3(s2);string s4 = s3;string s5 = "hello world!";

有参构造可以用到“=”赋值操作符,也是拷贝的作用。

2.string的遍历

1.for普通遍历

在讲string的遍历之前就要先讲到string这个类里面有的[ ] 字符重载size()函数。[ ]字符重载让string的数据能像数组一样用下标访问,size()函数则可以让string取到最后一个字符的下标。所以,string也能像数组一样遍历:

for (int i = 0;i < s5.size();i++){cout << s5[i] << " ";}

2.迭代器的方式遍历

在string这个类里面还支持着两种迭代器:

1.正向迭代器:iteractor,2.反向迭代器:reiverse_iterator

先来看看正向迭代器:

要使用正向迭代器,就要先知道string里面的两个函数:begin()和end()。这两个函数可以让我们取到字符开头的地址和字符结束的地址。所以使用正向迭代器方式如下:

string::iterator it = s5.begin();//因为iterator是string这个类里面的,所以要用::突破类域来访问使用。while (it != s5.end()){cout << *(it) << " ";it++;}

反向迭代器:

要想使用反向迭代器首先就要先知道rbegin()和rend()两个函数。这两个函数和begin()以及end()一样都是取字符串地址的。但是这两组函数取的地址是反的。反向迭代器的使用方式如下:

string::reverse_iterator it = s5.rbegin();while (it != s5.rend()){cout << *(it) << " ";it++;}cout << endl;

小技巧:

1.auto

因为使用迭代器时it的前面都要加上很长的类型,所以在这时我们便可以使用auto来对it的类型进行推导从而实现遍历:

auto it = s5.begin();while (it != s5.end())
{cout << *(it) << " ";it++;
}
cout << endl;auto it = s5.rbegin();
while (it != s5.rend()){cout << *(it) << " ";it++;}cout << endl;

2.for语法糖

如果还想再偷一下懒就可以使用for语法糖:

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

3.string中的函数

1.拷贝函数:string (拷贝对象,起始位置,拷贝个数)

cout << s5 << endl;
string s6(s5, 6, 4);
cout << s6 << endl;

结果:

补充:当然,如果你想要打印某个字符后面的全部字符的话便可以:

string (拷贝对象,起始位置,npos),npos的值是size_t -1。

cout << s5 << endl;
string s6(s5, 6, s5.npos);
cout << s6 << endl;

结果:

 

2.clear函数与capacity函数。

clear函数是一个清理数据的函数,但是不会销毁内存。而capacity函数就是一个显示容器容量的函数。如:

    cout << s5 << endl;cout << "容量:"<<s5.capacity() << endl;cout << s5 << endl;s5.clear();cout << "清理数据后:"<<s5 << endl;cout << "容量:" << s5.capacity() << endl;

结果:

 

今天的内容就到这里了。


 


http://www.ppmy.cn/news/1007003.html

相关文章

Centos虚拟机忘记密码-修改密码

1.重启系统 2.在这个选择界面&#xff0c;按e建 3.找到如下位置&#xff0c;插入init/bin/sh 4.填写完成后按Ctrlx引导启动 5.输入mount -o remount, rw / (注意空格) 6.重置密码 出现以下为重置成功 7.执行touch /.autorelabel 8.退出exec /sbin/init 9.输入你的新密…

基于Java+SpringBoot+SpringCloud+Vue的智慧养老平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

基于php雪花算法工具类Snowflake -来自chatGPT

<?phpclass Snowflake {// 定义Snowflake算法的各个参数private $workerIdBits 5;private $datacenterIdBits 5;private $sequenceBits 12;private $workerIdShift;private $datacenterIdShift;private $timestampLeftShift;private $maxWorkerId;private $maxDatacente…

夏季必备的开放式耳机,轻巧挂耳音效出色,sanag塞那 Z65S Pro Max

蓝牙耳机如今已经非常流行了&#xff0c;今年又出现了很多异形的蓝牙耳机&#xff0c;像是夹耳式、分体式、挂耳式等&#xff0c;这类耳机大多还采用了骨传导、气传导等创新技术&#xff0c;主要目的无非是为了提升佩戴的稳定性、舒适性和安全性&#xff0c;尤其是到了炎热的夏…

css实现卡片的左上角有一个三角形的遮盖效果

需求: 卡片的左上角有一个绿色的三角形标签,用来区分状态 实现: .vCard{position: relative;overflow: hidden; } .vCard::before {content: "";position: absolute;top: 0;left: 0;width: 0;height: 0;border-bottom: 20px solid transparent;border-left: 20px …

优化|当机器学习上运筹学:PyEPO与端对端预测后优化

分享者&#xff1a;唐博 编者按&#xff1a;​ 这篇文章我想要写已经很久了&#xff0c;毕竟“端对端预测后优化”&#xff08;End-to-End Predict-then-Optimize&#xff09;正是我读博期间的主要研究方向&#xff0c;但我又一直迟迟没能下笔。想说自己杂事缠身&#xff08;实…

Python二维数组的坑:vis = [[0]*m] * n

先来看&#xff0c;vis [[0]*m] * n&#xff0c; vis2 [[0]*m for _ in range(n)]有什么区别&#xff1f; 这两行代码都是用来创建二维列表&#xff08;或矩阵&#xff09;&#xff0c;但它们之间有一个关键的区别在于列表的复制方式。 vis [[0]*m] * n&#xff1a; 这种方…

【C++】类的隐式转换和explicit抑制类的隐式转换

2023年8月5日&#xff0c;周六下午 今天在网上找了很久都没找到有精确定义了类的隐式转换条件的资料&#xff0c;最后是在权威书籍《C Primer&#xff08;第5版&#xff09;》里面找到的。 说真的&#xff0c;虽然我认为《C Primer&#xff08;第5版&#xff09;》不适合作为…