小程序制作需求文档,seo销售话术开场白,怎样在百度上宣传自己的产品,数商云价格目录
什么是STL
string类
string类常见接口
string类的常见构造函数 string类对象的容器操作 string类对象的访问及遍历操作
string类对象的修改操作
拓展 从本期开始#xff0c;我们将正式学习C中的STL#xff0c;美国的麦克阿瑟将军说过#xff1a;“C不能没有STL就…目录
什么是STL
string类
string类常见接口
string类的常见构造函数 string类对象的容器操作 string类对象的访问及遍历操作
string类对象的修改操作
拓展 从本期开始我们将正式学习C中的STL美国的麦克阿瑟将军说过“C不能没有STL就像西方不能没有耶路撒冷”。这足以见得STL在C中的地位。
什么是STL STLSTL俗称标准模板库是C标准库的重要组成部分不仅是一个可复用的组件库而且是一个包罗数据结构与算法的软件框架。 为什么说STL是一个保罗数据结构与算法的软件框架呢我们通过STL的六大组件不难看出STL六大组件为仿函数算法迭代器空间配置器容器配接器。图示如下 算法有很多比如查找交换逆置排序归并等等容器就是我们常说的数据结构这些数据结构是在库中定义过的我们可以直接使用。 本期我们主要学习的就是STL容器中的string类。在学习stl时我们使用https://legacy.cplusplus.com/进行相关学习小伙伴可以自行在这个官网查看对应的使用方法。
string类 在学习C语言时我们通常使用字符数组来定义字符串但是在C中做了改进我们用string类来定义字符串。 string类常见接口
string类的常见构造函数 1.无参的构造函数即默认构造函数构建一个空字符串。 2.拷贝构造函数。 3. 用一个常量字符串来初始化对象的构造函数。 代码如下
#includeiostream
using namespace std;
#includestring
int main()
{string s1;string s2(hello yjd\n);string s3(s2);return 0;
}截图如下 string类对象的容器操作 1.返回字符串的有效字符的个数有效字符就是\0之前的所有字符。 代码如下
int main()
{string s1(hello yjd);cout s1.length() endl;cout s1.size() endl;return 0;
}截图如下 2.返回空间总大小即字符串最多容纳的字符的个数。 代码如下
int main()
{string s1(hello yjd);cout s1.capacity() endl;return 0;
}
截图如下 3.清除字符串中的有效字符。 代码如下
int main()
{string s1(hello yjd);cout s1 endl;s1.clear();cout s1 endl;cout s1.capacity() endl;return 0;
}截图如下 注意清除有效字符并不影响字符串的capacity的大小即不影响字符串字符串存储字符的最大个数。 4.判断字符串是否为空为空返回ture否则返回false。 代码如下
int main()
{string s1(hello yjd);string s2;cout s1.empty() endl;cout s2.empty() endl;return 0;
} 截图如下 string类对象的访问及遍历操作 1.重载[ ],在之前[ ]只允许用于整形数组的元素的访问但是在重载之后支持自定义对象进行元素的访问string类对象可以看成是一个字符数组。 2.at成员函数进行访问。 代码如下
int main()
{string s1(hello yjd);for (size_t i 0; i s1.size(); i){cout s1[i] ;}cout endl;for (size_t i 0; i s1.size(); i){cout s1.at(i) ;}return 0;
}截图如下 如果我们执行完下面的代码会打印什么呢
int main()
{string s1(hello yjd);for (size_t i 0; i s1.size(); i){s1[i]1 ;}cout s1 endl;for (size_t i 0; i s1.size(); i){s1.at(i) 1;}cout s1;return 0;
}我们发现对象的值发生了改变这样就意味着[ ]运算符重载和at成员函数的返回值应该是字符串中每个字符的引用所以此时引用最大的作用并不是为了减少拷贝而是为了改变对象的值。 string类对象的修改操作 1.push_back,在字符串尾部添加字符 代码如下
int main()
{string s1(hello yjd);cout s1 endl;s1.push_back(h);cout s1 endl;
} 截图如下 2.append在字符串后追加字符串。 代码如下
int main()
{string s1(hello yjd);cout s1 endl;s1.append(hello djy);cout s1 endl;
}截图如下 3. 重载,使得自定义字符串对象可以实现操作。 代码如下
int main()
{string s1(hello yjd);cout s1 endl;s1 h;cout s1 endl;s1 hello djy;cout s1 endl;
}
截图如下 上面便是我们经常使用到的string类的成员函数。
拓展
1.不知道大家有没有注意到下述行代码
cout s1 endl; 我们知道流插入运算符一般情况下只能用于编译器的内置类型可是这里为什么却可以使用在自定义类型之上呢 这是因为我们对流插入运算符和留提取运算符都做了重载作为了string类的非成员函数所以我们可以使用流插入运算符实现对自定义对象的输出。 2.我们知道stl的容器都是建立在模板的基础上进行学习的可是为什么我们在定义string类对象时丝毫没有看到模板的影子呢就比如这行代码
string s1(hello yjd); 其实cplusplus中的文档已经告诉了我们答案 原来string是对basic_stringchar的重命名。这就更奇怪了一个字符串的每个元素的类型可能性就是字符呀还能有其他类型吗 其实这就牵扯到了编码的相关概念因为对于英语的字符而言无非就是26个英文的大小加上一些其它的字符一个char是一个字节也就是8个bit转为10进制就是256所以使用一个char类型可以表示256个字符对于英语的字符这肯定是够了的。但是对于中文各种菠萝文这些语言那么多字符肯定是远远不够的所以此时字符串的每个元素的类型可能就是其它的char在cpluspus文档中可以看到 总共有四种类型的char所以string类也是模板本质上就是basic_string类模板。
好了以上便是本期的所有内容主要讲述了string类的一些基本的操作都是一些基础的内容。
本期内容到此结束^_^