| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 植物大战 string——C++ -> 正文阅读 |
|
[C++知识库]植物大战 string——C++ |
猛戳订阅🍁🍁 👉 [C++详解专栏] 👈 🍁🍁 这里是目录一、编码为什么string不能针对char来写,因为编码不同,。char只能表示256个字符。 string管理的是一个char*的字符串。 1.ASCII码ASCII码表。是美国设计的。 2.unicode编码也叫做万国码。 Unicode是针对全世界的语言而设计的一种编码。 常见的有utf-8 utf-16 utf-32 3.gbkgbk是叫做国标码。是针对中文创建的一个编码。其中还涉及台湾的。 计算机上不止有英文,还要有中文,日文等语言。但是ASCII码表不足以表示。 二、string的使用string是C++标准库的一部分,但是不属于stl。 使用就不多讲了,详细操作多看C++参考网站。 网站如下。 string是typedef出来的,原生叫做basic_string string的头文件就是,C++不分头文件不分后缀。 为了和C语言的string.h做区分,所以可以不加.h。 string是属于std命名空间的。所以需要加上using namesapce std。 学习类先学习构造。 先不学C++11的右值引用。 1.构造函数string类一个管理动态增长字符的数组,可以认为这个就是字符数组,因为要兼容C语言,所以结尾是\0。 注意npos是负一。负一的整形是全1,也就是**整形最大值。**这个参数是默认的,原因为,假如不给参数,给的就是整形最大值。 无参构造函数string()千万不要在创建对象的时候加括号()。和普通函数的调用不一样。
常量字符串构造string(const char* s)注意:缺省参数不能给nullptr,这样传过去就崩了,只能给双引号也就是空字符串“”. 这个参数是Cstring类型的。
底层实现是开一段空间去存放所传递的hello字符串的。
拷贝构造string(const string& s)
2.析构函数析构函数就简单了,析构函数是自动调用的。 3.遍历string重载operator[] (size_t i)第一种方式是下表+[] 重载函数[]返回的是char的引用。 重载const[]。一般重载[]还有一个针对const对象的,const对象只可读不可修改,所以返回值类型也必须是const引用,也要在函数的括号()加上const。 方式一
还有一个at()函数和重载[]效果一样,不同点在于at会检查越界,以断言的方式进行检查的。 迭代器遍历为什么要用迭代器?现阶段学的string底层物理空间连续,可以用数组下表访问,但是当学了map等底层空间不连续的容器,用迭代器非常的方便!因为它是像指针一样的东西。 迭代器是内嵌在string整个类中。vector,list,map通用,都内嵌在各自的类中。
迭代器是像指针一样的东西。 具体要看底层的具体实现。 重点: 一般迭代器的标准语法都是用不等于。这样的话可以使得vector,map,set更加的使用。因为他们不是连续的结点。地址不连续。就像vector的迭代器是封装的。 迭代器遍历也有注意点。 形式参数是const对象接收的。假如传的是普通对象,就会报错。
1.const迭代器返回的是const的迭代器对象。这样传参就不会报错了 反向迭代器:
范围for范围for是C++11的。底层还是迭代器。 在linux中使用这个语法需要加上-std=c++11
4.插入reserve()作用:reserve可以提前开空间只改变容量。但是在vs下不会缩容量。 push_back扩容在g++下面是1.5倍扩容的。 因为扩容有代价,所以有什么方法可以减少扩容? resize作用:开空间+初始化。可以改变size push_back(size_t i)append作用:一般用来在尾部插入字符串。尾插的时候使用。但是日常一般不实用,一般都用重载后的+=。 insert作用:一般在pos位置插入字符或者字符串(对象)。 c_str()作用:返回指向字符串的指针,可以很好地和C语言的接口配合。 find()作用:从pos(默认为0)位置查找某个字符或者字符串。如果不匹配返回npos。 substr作用:取得pos位置的字符串。 三、string模拟实现string 当前不涉及模板,所以比较简单。 1.浅拷贝strcpy拷贝的时候会把\0也拷贝过去。 浅拷贝:我们不写,编译器会默认生成一个拷贝构造函数,这个拷贝是值拷贝。也叫做浅拷贝。 浅拷贝没有写拷贝构造函数,完成值拷贝。
实际上内存空间不是你用完后就销毁了。而是使用权被操作系统回收了。回收后可能会分配给其他人用。 内存空间就像是你租的房子,房租到了你只会还一次,而不是还两次,你还的第二次可能是别人的房子。你不能拿着别人的房子还,因为你没有使用权。 2.深拷贝深拷贝需要自己写。
3.赋值重载构造赋值重载是在两个都已经存在的对象赋值。 有两个问题 所以在实际中一般都不会直接拷贝。 注意,引用返回的原因有两个。
上面代码有些瑕疵,万一开空间失败了呢?
4.增删查改reserveC++扩容不用考虑realloc。
push_back
append
operator+=一般尾部加字符或字符串都是用+=,而不用push_back或者append.
resize有三种情况。假如容量是15,_size是11.
insert在任意位置前插入数据。
erasenpos是static的,static变量在类内声明,类外定义。
5.迭代器string迭代器没啥说的,和指针差不多,当作指针用就行。 需要注意的是:
6.<<流插入友元函数是为了访问私有,才设置的。 流插入必须写成全局的,这样out对象才能抢占第一个参数。 一般使用如下写法
7.>>流提取流提取的第二个参数不能加const了,因为需要放字符串到里面。
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:59:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |