茂名营销型网站建设网页制作初体验教案
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:27
当前位置: 首页 > news >正文
茂名营销型网站建设,网页制作初体验教案,如何做领券网站,深圳福永网站建设公司绪论 放弃时间的人#xff0c;时间也会放弃他。——莎士比亚 #xff1b; 本篇章是关于string类内一些函数的介绍以及使用方法#xff0c;都是我们编程必须掌握的基础#xff01; 全文共7000字左右. 话不多说安全带系好#xff0c;发车啦#xff08;建议电脑观看… 绪论 放弃时间的人时间也会放弃他。——莎士比亚 本篇章是关于string类内一些函数的介绍以及使用方法都是我们编程必须掌握的基础 全文共7000字左右. 话不多说安全带系好发车啦建议电脑观看。 附红色部分为重点部分蓝颜色为需要记忆的部分不是死记硬背哈多敲黑色加粗或者其余颜色为次重点黑色为描述需要 思维导图 要XMind思维导图文件的话可以私信哈 目录
1.STL
2.string以及string的基本使用
2.1string的构造函数
2.2sting的赋值运算符重载
2.3string的append追加函数
2.4 string的运算符重载
2.5string的operator[ ]运算符重载
2.6迭代器iterator编辑
2.6.1逆向迭代器reverse_iterator
2.6.2 const_迭代器
3.string类对象的容量操作的接口函数
3.1reserve
3.2resize
3.3strink_to_fit
4.对string空间的元素访问的接口函数
4.1operator[]
5.修改string的内容的接口函数
5.1assign
5.2insert
5.3erase
6.对字符串操作的一些接口
6.1c_str
6.2find
6.3rfind
6.4 find_first_of 、find_last_of
7.string中的非成员函数重载
7.1一些常用的运算符函数重载
7.1.1比较类运算符重载
7.1.2string的 operator
7.1.3 getline
7.2 把字符串与其他类型的相互转换 1.STL
知识点 STL是C标准库的重要组成部分不仅是一个可复用的组件库还是一个包罗数据结构与算法的软件框架。 STL有好几个版本 原始版本由惠普实验室的两位大佬完成的也称为 HP 版本P.J. 版本 它是由P.J. Plauger 开发完成的。继承自HP版本后主要被微软使用缺点可读性低符号命名奇怪RW 版本 后面因为竞争不过微软而倒闭就不过多叙述SGI 版本继承自 HP 版本 被GCCLinux采用可移植性强命名风格和编程风格都比较好 有着良好的阅读性后面我们主要学习这个版本的STL源码 STL的六大组件 算法swap、find、sort …容器(数据结构)string、vector、list、map …迭代器iterator、const_iterator 、….配接器stack、queue、…空间配置器(内存池)allocation仿函数less、greater 2.string以及string的基本使用
知识点 string他像是一个数据结构管理其字符串的增删查改 细节 我们在学习的时候就主要学习其中比较重要的部分因为对于这些库实现的是比较全面可能有过多的分支我们并不需要全部掌握因为学的过多也不一定好事我们只需要大概的有个印象即可到时候假如要用到的时候我们可以去查文档。 这里推荐一个可以查看c文档的网址https://cplusplus.com 本章主要通过代码实例的形式去掌握语法我们需要多去使用这样才能更好的去记住他们
其中以下函数的使用方法和正常创建的类对象中的函数的使用方法是一样的可以把 string 看成是一个类。 2.1string的构造函数 从上图可以发现string的构造函数在库中重载的实现了很多种后面还有许多的函数他们同样也都是重载了许多函数并且其参数也差不多所以我们能类比的进行学习他们都有对应的应用场景我们可以根据不同的情况去对应着使用但没必要全部都熟系掌握。 功能初始化对象 用法如下(请单击图片放大观看) 再通过实操来对其进行掌握建议自己看后再写一遍具体如下: #define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
#includestring
using namespace std;int main()
{string st;//构造为空string st1(hello world);//将hello world字符串给对象string st2(st1);//拷贝构造st1给对象string st3(st1, 6, 5);//从st1 的下标为6的位置处向后的5个字符给对象string st4(st1, 6);//在第三个参数有缺省值所以不一定需要写第三个参数npos是一个无符号的-1也就是整形的最大值并且规定了此处的构造函数当npos的长度大于字符串的长度就会直接打印剩下的全部string st5(hello world,5);//提取c字符串中的前5个元素给对象string st6(10, * );//创建10个*给对象cout st endl;cout st1 endl;cout st2 endl;cout st3 endl;cout st4 endl;cout st5 endl;cout st6 endl;} 运行结果 附string的析构函数接口并不用调用程序结束自动归还操作系统所以就不写了 2.2sting的赋值运算符重载
功能给类对象进行赋值操作 用法对应着重载函数如下代码 string st7(张三);string st8(李四);cout st7 endl;st7 张三丰;//赋值成一个字符串cout st7 endl;st7 z;//赋值为一个字符cout st7 endl;st7 st8;//拷贝构造cout st7 endl; 运行结果可以把它当成内置类型一样的去使用。 2.3string的append追加函数
功能其重载的函数的大概用法和前面的构造函数重载的差不多只不过此处是追加就不一 一展示了主要还是用到第3个在this指针指向的对象后面追加字符串。 具体如下 2.4 string的运算符重载
功能也是一个追加类型的函数他比追加函数更加好用一般就用替代append 用法如下 附并且对于上面这些在后面增加字符的情况都不需要我们去判断是否需要扩容编译器都会帮我们自动完成当申请空间不够时的扩容。 2.5string的operator[ ]运算符重载 功能通过operator[ ] 运算符 我们就能自由的访问到对象字符串中的各个元素了。 具体如下 附 其中注意的是st.size他和strlen 用法是一样的都不算\0的 并且因为其返回值是其引用所以对于使用[ ]时我们就能去改变其中字符串的内容。 如下此时我们用的就像内置类型一样但是我们始终要记得他们底层是不一样的 2.6迭代器iterator 迭代器类似于一个指针可以用于任何容器并且能对容器内的数据进行访问和修改对此就要提之前讲过的范围for其实范围for的底层就是用迭代器来实现的所以说只要容器满足迭代器就能使用范围for。对于算法来说他的本质是对数据进行修改的排序的但是因为容器数据类的对象都是私有的所以为了使用到其内部的数据就需要借用迭代器。 证明其容器能使用迭代器对此因为满足迭代器所以就能去用算法和范围forreverse逆置算法的参数需要左闭右开的数据 附 其中的begin、end是用来找到字符串对象的开始和结尾的并且返回迭代器类型。 2.6.1逆向迭代器reverse_iterator
其用法几乎一样但有几点需要去注意一下 在写开始的时候就需要用rbegin结束处为rend这样就能从后往前找数据 此时能很好的看出beginrbegin指向闭区间而endrend指向开区间没用的空间所以对于逆向迭代器来说此时范围for就不行了因为范围for的底层是一个正向的迭代器 具体如下 2.6.2 const_迭代器
下面通过实际情况来进行对const_迭代器的解释 此处出错的原因是因为传来的st是用const类型接收的所以不能用常规的迭代器const修饰即对象是一个const类型时就需要用const_iterator 此时就需要使用到const迭代器 若是逆序的迭代器同理需要用加上const 下面是一些会更加具体的去写string 3.string类对象的容量操作的接口函数
知识点
string并不属于容器而是在标准库中的因为string产生的比stl更早 在stl中的数据个数用size表示而在string是用来表示字符串的所以其表示长度用length但是为了统一以及不修改源码不删除length的情况下string下就既有size又有length对此我们建议用sizesize在其他容器中也有。size和length的用法是一样的就是直接对象.size() / 对象.length()。max_size(); 函数是查看最大长度但是因为不同编译器下用的版本不同就导致了其最大长度是不一样的这个接口对于我们的使用无意义基本不用。同样的capacity函数也是在不同编译器下是不同的并且增长也会不同(在vsPJ下基本是1.5倍增长LinuxSGI下是2倍增长)clear( )函数清理string中存的数据把size变成0capacity不变 细节
3.1reserve 功能对string的容量进行自行的确定可以申请空间也能缩小空间一般应用于当我们知道需要用到多大的空间处就能直接一次性的开辟怎么大的空间避免再每次不够了再进行扩容能一定的提高效率并且此时申请的空间会大于等于所要申请的空间像vs环境下就会多开一段而centos7下就刚好和申请的空间一样 具体如下 在vs环境下进行开辟空间 在Linux下 当缩小空间时是否会缩小的空间看的是容器中是否还有数据若有则不会缩小 反之则缩 3.2resize 功能 既能去申请空间并且可以对申请的空间进行初始化默认初始化为\0 具体如下 也可以指定初始化也就是第二个重载函数的意义 当他缩小空间时他会先把超过范围的数据不算在内用\0隔开相当于后面的数据给你删了 附综上所述对于缩容情况来说一般都是不会进行的除了clear清除数据后的reserve缩容才进行了缩容主要原因是缩容的效率是挺低的它需要去先移动缩容后剩下的数据到新的空间处再进行把原位置的空间进行释放并且现在的内存也挺多的并不会去怕内存不够这种情况所以就不为了内存而降低效率所以一般是不会缩容的。 3.3strink_to_fit 功能一个主动缩小空间的接口将capacity减到合适的大小,一般把capacity减小到size大小或者比size大一些的值 但注意他也并不一定会缩小这是给编译器一个建议 4.对string空间的元素访问的接口函数
4.1operator[] 功能可以直接当成数组一样的去访问其string内部的元素在上面已经实现过来就不再过多赘述了 他还可以用来访问了元素然后进行修改具体如下 当越界时会报出断言错误而at()接口其用法和 [ ] 一样就不写了用处也不大有兴趣的可以查一下文档则会报出异常错误。 5.修改string的内容的接口函数
5.1assign 功能进行赋值操作将string内原有的值覆盖掉。 具体如下 但其实我们平常并不喜欢用 而是喜欢直接用重载操作符 但他完成一些运算符重载函数完成不了的赋值方法如上面的第2、4、5、6 的重载函数此时他们有多个参数完成而对于运算符他只能有两个操作数 5.2insert 功能在指定pos位置处插入数据 具体如下 当要注意insert不要多用其在非尾部插入效率都是比较低的 5.3erase 功能对指定位置处删除len个字符若不写len则删除指定位置及其后面的所有字符因为缺省参数npos是一个非常大的值整形最大值 具体使用 附replace是一个交换函数接口可以把指定的数据改变成想要的数据但该函数接口并不常用所以就不写了想了解可以查一下文档 6.对字符串操作的一些接口
6.1c_str 功能该函数是用来直接指向顺序表中的数组的string实际是用一个顺序表来实现的 有了这个函数就能去和c的接口函数合否则是c无法识别string类型的因为有些C语言地方他只能和内置类型去对接 FILE * fopen ( const char * filename, const char * mode ); 6.2find 功能从pow位置开始往后查找字符串/字符并且返回第一次出现时的位置若没找到则会返回npos整形最大值 具体使用方法如下 补充一个函数接口substr 功能 他能从指定pos位置开始往后len个字符的字符串放到string内并把这个string返回。 下面用这个两个函数来实现把一个网址划分成协议、域名、资源名动态版无论什么网址都能进行分隔 1 #includeiostream 2 using namespace std;3 4 int main()5 {6 string s https://legacy.cplusplus.com/reference/string/string/find/;7 8 string protocol; 9 10 size_t pos1 s.find(://);11 if(pos1 ! s.npos)12 {13 cout s.substr(0,pos1) endl;//参数pos1表示的是个数此时从0位置开始到pos1个就刚好是协议名14 }15 16 string domain;17 string uri;18 int pos2 s.find(/,pos13);//可以确定开始的位置
W 19 if(pos2 ! s.npos)20 {21 cout s.substr(pos13,pos2-(pos13)) endl;22 cout s.substr(pos21) endl;23 }24 return 0;25 } 6.3rfind 其功能和find几乎一样只是反过来从后面往前找字符/字符串就不赘述了。 6.4 find_first_of 、find_last_of find_first_of: 功能是在对象字符串中从前往后查看是否有参数中的字符返回第一次出现的下标位置若果有就返回其下标位置若没有则返回npos 具体如下 find_last_of : 功能和 find_first_of 一样只不过此时是从后往前找 附还有类似相反的函数find_first_not_of 以及 find_last_not_of : 他们是用来查找参数字符中没有出现过的返回其下标、last同样只是反过来了从后面往后查找而已同样当没有时就会返回npos 但其实他们都没有非常的有用我们只需要了解一下有函数能查找在字符串中出现、查找字符串中没出现过的字符在参数字符串中的会一 一进行查找当出现时就会返回第一次出现的字符的下标 7.string中的非成员函数重载
7.1一些常用的运算符函数重载
知识点
7.1.1比较类运算符重载 功能在String中已经重载其比较的重载运算符所以我们就直接使用这些来比较即可能直接当成内置类型一样的来使用不过要注意的是其比较的底层还是重载运算符以及是用ASCII码来对应着比较的 具体如下 附虽然string中有compare比较函数但是他并没用下面的这种方式好用就不去讲他了主要就写下面这种运算符重载的方法。 7.1.2string的 operator 功能用法很简单因为string他已经帮我们实现好了所以只需要去直接用就好就像内置类型的加法一样他并不会改变加的变量只是用该变量返回加好后的值此处的加就是加上字符/字符串。 具体如下 7.1.3 getline 功能读取一行的数据遇到\n才会停止 在有些编译器下需要加上头文件#includestring 实例一般用于当字符串中用空格分隔时cout 、 printf 他们不能直接读取字符串时 具体如下 7.2 把字符串与其他类型的相互转换 功能用来将字符串和其他多种字符进行转换的。 stoi把字符串转化成整形stol … 长整形 … 、to_string把某类型转化成字符串 重载函数如下 其中to_string很简单就不讲了看下面的例子就能看懂那stoi举例把字符串转化成整形其中第一个参数是字符串idx是表示从字符串的那个下标开始往后转换而base表示的是转换成几进制的整形后面的两个参数一般是不用管的。 具体如下 本章完。预知后事如何暂听下回分解。
如果有任何问题欢迎讨论哈
如果觉得这篇文章对你有所帮助的话点点赞吧
持续更新大量C细致内容早关注不迷路。
- 上一篇: 茂名网站开发公司推荐做网站
- 下一篇: 茂名优化网站建设ssh网站开发的书籍
相关文章
-
茂名网站开发公司推荐做网站
茂名网站开发公司推荐做网站
- 技术栈
- 2026年04月20日
-
茂名网站建设制作凡客诚品羽绒服
茂名网站建设制作凡客诚品羽绒服
- 技术栈
- 2026年04月20日
-
茂名网站建设哪家好网络推广方案的制定流程
茂名网站建设哪家好网络推广方案的制定流程
- 技术栈
- 2026年04月20日
-
茂名优化网站建设ssh网站开发的书籍
茂名优化网站建设ssh网站开发的书籍
- 技术栈
- 2026年04月20日
-
茂名专业网站建设公司常宁seo外包
茂名专业网站建设公司常宁seo外包
- 技术栈
- 2026年04月20日
-
茂名专业网站建设公司工程公司招聘
茂名专业网站建设公司工程公司招聘
- 技术栈
- 2026年04月20日
