0


STL初识——string类的那点事

何为STL? STL是指标准模板库(Standard Template Library)。 包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。从根本上说,STL 是一些容器、算法和其他一些组件的集合
那对于我们又应该如何去学STL呢? 养成阅读相关文档的良好习惯,下面为友友们提供两个不错的网站(记得做好克服自己的英文阅读困难的准备哦!):

cplusplus,非官网,但布局比较美观,支持到C++11
cppreference,官网,可支持到最新标准,但布局不太美观
文档一般结构布局为:接口函数声明——>接口函数的功能、参数以及返回值的说明——>使用样例代码

那让我们正式进入string类的学习吧!

首先,在STL中的string类有9个构造函数,此处以最常用的3个和大家一起来学习

  1. string类的无参构造函数
  2. string类的有参构造函数
  3. string类的拷贝构造函数
string s1;//无参构造 
string s2("come on");//带参的构造
string s3(s2)//拷贝构造
string s4="come on";
s1 ="happy";//等价于带参数的构造,string支持char类型字符串的构造

运行结果
运行结果拓展小知识:
1.wchar_t 为宽字节,2byte 其能够更好的表示unicode等编码,其对应STL中的wsting,而常见的为char对应的sting
2.ascll码其实是早起针对英文的编码,而后来为了显示各个国家的语言文字,便引入了unicode,utf-8,uft-16,uft-32等编码,
gbk即是专门针对中文的编码方式。

接下来,让我们通过一道简单的练习再进一步理解一下吧!

原题链接
解题思路:
方法一,下标+[ ]遍历并+计数排序思想

classSolution{public:intfirstUniqChar(string s){int count[26]={0};for(size_t i=0;i<s.size();++i){
            count[s[i]-'a']++;}for(size_t i=0;i<s.size();++i){if(count[s[i]-'a']==1)return i;}return-1;}};

方法二,迭代器遍历+计数排序思想

classSolution{public:intfirstUniqChar(string s){int count[26]={0};
        string::iterator it=s.begin();while(it!=s.end()){
            count[*it-'a']++;++it;}for(size_t i=0;i<s.size();++i){if(count[s[i]-'a']==1)return i;}return-1;}};

方法三,范围for遍历+计数排序思想

classSolution{public:intfirstUniqChar(string s){int count[26]={0};for(auto x: s){
            count[x-'a']++;}for(size_t i=0;i<s.size();++i){if(count[s[i]-'a']==1)return i;}return-1;}};

总结一下,其实三种方法唯一的区别就是三种的遍历方法不同,思路的中都是计数排序的思想。
想了解三种遍历方式的详细情况吗?点击这里吧!
最后让我们再来看一下一些其他常用的接口吧

string.erase()用法

  1. string.erase(pos,n)删除从pos开始的n个字符(pos是string类型的迭代器) 默认pos=0,n=nps=-1
  2. string.erase(pos)删除pos处的字符
  3. string.erase(first,last)删除从first到last中间的字符
string s1;
s1.erase(0,1);
s1.erase();//为全部删完

尾插

1.push_back(’ ')插入单个字符
2.append(" ")插入字符串,也可进行拷贝构造
3.直接使用+=,可直接插入单个字符,也可以插入字符串

string s1;
s1.push_back('i');
s1.append("world");
string s2;
s2.append(s1);
s1+="rh";//其实底层调用的还是前两个接口
s1+='l';

头插或中间插入

string.insert()
注意不支持插入单个字符,但可以插入一个字符的字符串

string s1;
s1.insert(0,"x");//头插
s1,insert(3,"yyyy");//中间插

虽可以进行头插和中间插,但尽量少用insert,因为底层实现的是数组,头插或者中间插入是需要挪动数据的。

标签: c++ 开发语言 后端

本文转载自: https://blog.csdn.net/TWRenHao/article/details/117263411
版权归原作者 風的尾巴 所有, 如有侵权,请联系我们删除。

“STL初识&mdash;&mdash;string类的那点事”的评论:

还没有评论