C++ STL主要组件之String总结

最近在学习C++时,进入到了STL的学习阶段,在发现到这个部分的重要性时,我打算把对STL的学习分步骤记录下来,我首先打算学习的是组件String的部分,此文章主要只记录内部构造和对象基本操作。

STL是由C++提供的标准模板库,内含多个主要组件,此次总结的是String部分的内容。String在STL中算是较为重要的部分,所以需要我重点攻克。

先放一张我学习String后对于此部分知识点的概括。
C++ STL主要组件之String总结(第一部分,构造和操作)

首先是第一部分:

一.标准库中的String类都有哪些内容
首先是String中包含的接口:
其实这一部分要理解还是不难的,因为这些功能性的函数之前大都或多或少的编写过。
1.构造函数
(1)无参构造函数
string()//构造空的string对象,一个空字符串
eg:

string s1;//构造空的String类对象s1
(2)带参构造函数
此时常见构造函数就不止一种了
①参数为c风格字符串
string(const char * s)
eg:

string s2(“hello”);//使用C风格字符串构造的String类对象
②构造的对象中包含n个字符c
string(size_t n,char c)
eg:

string s3(10,‘n’);//构造的对象为字符串“nnnnnnnnnn”
③拷贝构造(使用相同类的对象来构造新的类对象)
string(const string& s)
eg:
string s4(s3);

2.String类对象对于容量的操作
这一部分其实要去全部学习其实是效率不高的,如下图
C++ STL主要组件之String总结(第一部分,构造和操作)
(图片来源cplusplus.com)
所以主要选取其中使用较为频繁的几种(size,empty,clear,reserve,resize)来主要学习便可。
(1)size
size函数会返回当前对象的有效字符长度
eg:

string s;
cout << s.size();
(2)empty
empty会检测当前字符串是否已释放为空串,是的话返回true,否的话返回false
eg:

string s;
if(s.empty()){
return 0;
}
(3)clear
clear会清空当前对象的有效字符,但不会改变底层空间大小
eg:

string s;
s.clear();
(4)resize( size_t n, char c )
resize会修改当前对象有效字符个数,多出的部分会使用字符c填充
若是修改后有效字符长度小于之前,则多出的部分将被截掉
eg:

string s;
s.resize(20,‘w’);

需要注意的点有:
<1>如果是将string类中的有效元素缩小,只改变有效元素个数,不会改变底层空间大小
<2>如果是将string类中的有效元素增多,可能需要扩容(改变底层空间大小)

(5)reserve( size_t newcapacity )
reserve会修改当前对象底层空间大小,但不会修改有效字符个数
当newcapacity > oldcapacity(string类旧空间大小)时,进行扩容
若是newcapacity < oldcapacity 时,函数直接返回,不作任何修改
eg:

string s;
reserve(20);
需要注意的点:
在不同环境下,reserve进行扩容的大小是不一样的(当对象字符串长度小于15时,初始分配底层空间大小为15):
例如:在vs平台下扩容大小大约是原来的1.5倍
但是在linux下扩容大小就是原来的2倍

最后是容量操作中的小点:
size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致(函数返回值也完全相同)

3.对于string类对象的访问方法
(1)对于指定位置的的访问
在对象操作中,这样的访问通常使用operator[ ]来进行(类似于访问数组元素的操作)
eg:

string s(“hello”);
cout << s[0];
输出结果:
h
(2)使用遍历方法访问(或修改)
在C++中,此处我们一共可以使用3中遍历方法(ps:I like it!O(∩_∩)O)
<1>使用for循环加operator[ ]的方式遍历字符串
eg:

string s(“beat it”);
for(size_t i=0;i<=s.size();++i)
cout << s[ i ];
<2>使用迭代器的方法遍历
注意:
①标准库容器都可以使用迭代器
②begin()方法负责返回指向第一个元素的迭代器,end()方法负责返回指向容器尾元素的下一个位置的迭代器
③如果容器为空,则begin和end返回的是同一个迭代器
④rbegin()返回一个逆向迭代器,指向字符串的最后一个字符,rend()函数返回一个逆向迭代器,指向第一个字符的前一个位置,具体位置为下图:
C++ STL主要组件之String总结(第一部分,构造和操作)
(图片来源于网络)

eg:

string::iterator it = s.begin();
while(it != s.end())
{
cout<<*it<<endl;
++it; //指向元素位置移动如上图
}

string::reverse_iterator rit = s.rbegin(); //此处为反向迭代器的使用
while(rit != s.rend())
{
cout<<*rit<<endl;
++rit; //指向元素位置移动如上图
}
<3>使用范围for方法遍历
eg:

for(auto c : s)
cout << c << endl;
4.对于string类对象的内容修改操作

string类中常用的此类操作有如下几种:

push_back --在字符串后尾插字符c
eg:
string s1;
s1.push_back(‘I’);
append --在字符串后追加一个字符串(使用方法有很多种,如下图)
C++ STL主要组件之String总结(第一部分,构造和操作)
eg:
常用的两种:
s1.append(“祖国”); //图中第一种
s1.append(3, ‘!’); //图中第五种
operator+= – 在字符串后追加字符串str
eg:
s1 += " Love ";
c_str --返回C格式字符串
find + npos --从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
eg:

size_t pos = s.find ( ’ c ’ ) ;
if ( pos != string : : npos )
{
cout << ‘c’ << " is in s" << pos << endl;
}
注意:
find方法在字符串s中查找字符c,若是找到返回该字符在字符串中的位置,若是没有找到则返回npos
npos是string类定义的一个静态成员变量,保证其值大于任何有效的下标的值,可看成一个整数-1

rfind 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置…(其他同find)
substr 在str中从pos位置开始,截取n个字符,然后将其返回
eg:
substr(pos,n);
substr(pos); //截取从pos到字符串结尾
同样只对其中较为重要的几种(operator+=、c_str、find+npos)进行重点记忆,其他几种了解即可。

5.对于string类的非成员函数
此处只是说明作用:

operator+ 尽量少用,因为传值返回,导致深拷贝效率低
operator>> (重点) 输入运算符重载
operator<< (重点) 输出运算符重载
getline (重点) 获取一行字符串
relational operators (重点) 大小比较
标明重点部分需要掌握使用,在在线OJ将会用到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值