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中我们还是使用+=较好).


相关文章
|
8月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
356 5
|
8月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
240 2
|
9月前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
113 4
|
9月前
|
编译器 C语言 C++
【C++】C++ STL 探索:String的使用与理解(三)
【C++】C++ STL 探索:String的使用与理解
124 2
|
9月前
|
存储 编译器 C++
【C++】C++ STL 探索:String的使用与理解(二)
【C++】C++ STL 探索:String的使用与理解
|
9月前
|
编译器 C语言 C++
【C++】C++ STL 探索:String的使用与理解(一)
【C++】C++ STL 探索:String的使用与理解
258 1
|
11月前
|
存储 算法 程序员
【STL】string
【STL】string
|
1月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
37 0
|
4月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
116 11
|
4月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
111 9