string的常用接口讲述(跑路人笔记)<stl初阶>(2)

简介: string的常用接口讲述(跑路人笔记)<stl初阶>

常用接口

reverse resize size


size&lenght

image.png


这两个接口功能相同,又有size又有lenght的主要原因是,在大佬实现完length的时候,发现为了stl的一致性应该有个统一的名字来命名接口,但是二叉树又没办法使用lenght来表达(毕竟二叉树他也没长度一说,所以就有出现了个size).


我们先来看看string的size.返回的值类似于strlen();也就是不算字符串的长度.length()返回的值也同理.


image.png


capacity

用来查看string容量的大小


直接看看代码就可以理解:


image.png

注:我们的string的容量是自动扩容的.


reserve&&resize

用于手动扩容,但是这两个还是有所差距的.


image.png


reserve


单纯用于开辟一片你指定的空间大小(不一定完全相同,因为存在对齐等问题)


resize

帮你开辟完空间后还会把size指定在你所指定的位置上,如上例resize后的size就是1000;

image.png



我们还可以通过传一个字符将resize后size前的数值初始化成我们串的字符样子.


如下:


image.png


如果是在resize之前就有元素在的情况呢?


如下:



image.png

如果我们想重新把size变成另一个小一些或者大一些的值的时候我们也可以使用resize;


如下:


image.png


符号重载

[]

这个符号重载,其实是模仿着这我们的普通字符串的,我们可以通过[]来直接访问对应下标的元素,也可以将对应下标的元素进行更改.可以说和我们的字符串一模一样.


我们在使用string的[]的时候其实是更改成函数operator[](size_t Off)


image.png


文档介绍如下:


image.png


可以看到我们函数重载的返回值是char& 也就是引用,这个其实也是有原因的


为了省去拷贝.

我们需要对pos位置的值进行更改我们就必须返回引用值&不然我们无法更改.

其实有着类似功能的还有at()这个公共函数


image.png


at这个其实功能和[]几乎就是一样的要说哪里不一样其实也就只有在你越界时报错方式不同了.


我们来看看报错问题


我们的[]使用的是assert断言的方式来进行报错处理的.


image.png


而我们的at()函数是通过抛异常来解决越界问题的.


image.png


我们只需要接收此异常就不会发生报错了.


如下图:


image.png


at其实可以看作之前版本的[].我们在使用的时候也多用[]不用at了.


operator=

image.png


这三个赋值几乎包含了所有的字符类。所以我们可以给直接给string类传递字符类型的所有形式。


包括单个字符。


如下:


image.png


注意这里的'a'的类型是const char这个接口是我们C++11增加的接口,上述代码在不支持的C++11的部分就无法运行。


如Linux的g++就会报以下错误。



image.png

不过鉴于我们是初学者,我们先不接触C++11在后面我们会进行专门的讲解。


+=operator

先来看看文档的介绍吧



image.png

ok,我们可以看到他有三个重载(在C++98中),那我们也就可以使用这三种重载.


分别使用效果如下


string s;
  s += "qwe";
  for (size_t i = 0; i < s.size(); i++)
  {
  cout << s[i] << " ";
  }
  cout << endl;
  s += 'a';
  for (size_t i = 0; i < s.size(); i++)
  {
  cout << s[i] << " ";
  }
  cout << endl;
  string s2 = "zxc";
  s += s2;
  for (size_t i = 0; i < s.size(); i++)
  {
  cout << s[i] << " ";
  }
  cout << endl;


image.png





可以看出+=的作用其实就是在我们的string后插入字符或字符串(也有两个接口是专门用来后插入字符或者字符串的但是在string中我们还是使用+=较好).


相关文章
|
1月前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
37 0
|
1月前
|
安全 算法 C语言
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
20 1
【C++进阶】深入STL之string:掌握高效字符串处理的关键
|
1月前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
19 1
|
12天前
|
存储 编译器 Linux
【C++】string类的使用②(容量接口Capacity )
这篇博客探讨了C++ STL中string的容量接口和元素访问方法。`size()`和`length()`函数等价,返回字符串的长度;`capacity()`提供已分配的字节数,可能大于长度;`max_size()`给出理论最大长度;`reserve()`预分配空间,不改变内容;`resize()`改变字符串长度,可指定填充字符。这些接口用于优化内存管理和适应字符串操作需求。
|
12天前
|
C++ 容器
【C++】string类的使用①(迭代器接口begin,end,rbegin和rend)
迭代器接口是获取容器元素指针的成员函数。`begin()`返回首元素的正向迭代器,`end()`返回末元素之后的位置。`rbegin()`和`rend()`提供反向迭代器,分别指向尾元素和首元素之前。C++11增加了const版本以供只读访问。示例代码展示了如何使用这些迭代器遍历字符串。
|
19天前
string类重要接口(2):`+=`
string类重要接口(2):`+=`
|
21天前
|
编译器 C语言 C++
【C++/STL】:string类底层的模拟实现
【C++/STL】:string类底层的模拟实现
19 0
|
21天前
|
算法 C++ 容器
【C++/STL】:string类的基本使用
【C++/STL】:string类的基本使用
13 0
|
1月前
|
C++ 容器 存储
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)
|
22天前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。