【STL】string

简介: 【STL】string

本节博客主要是介绍了一下CPP标准库中的string这一容器的相关用法和常用接口,有需要借鉴即可。


1.string介绍

1.1CPP标准库与STL关系

SLT是什么?

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

CPP标准库是什么?

CPP标准库指的是现有的可直接使用的流、函数、接口…

CPP标准库与STL是包含关系,STL属于CPP标准库的一部分,也可说STL是CPP标准库的核心数据结构与算法的总集。两者关系如下图所示:

1.2string历史问题与介绍

按照道理来讲,string应该属于STL中,但是因为历史遗留问题和编写年代的问题,string最终被归属于其他函数库中,标准中规定string并不属于STL。

参见:CPP标准库网站(非官网):LINK

但是实际上,string也是属于一种重要的数据结构,也应该归属到STL中去。

同时,string由于是被程序员最早实现的一批函数库,因而设计上谈不上完美,有些冗余(多达一百多个接口),因而在下面我只介绍string常用的几个接口。

2.string概要

从上面推荐的网站中,我们可以查到string的相关信息:

这个string底层是由类模板做的,也是typedef出来的。

思考:为什么用typedef和类模板?直接一个string类不好吗?

答:在单纯英文字母而言,string中只需要放char类型的字符,因而是可以的。但是由于各个国家语言文字随着计算机全球化的发展都需要映射到计算机中去,单纯的ascll编码已经不能满足人们需要,单纯的char类型也不能存储文字系统稍复杂的国家(比如中国),因而需要w_char来存入中国的文字,因而这里用了类模板。

3.Member functions

3.1constructor

这个地方常用的一个无参构造,一个字符串构造,还一个拷贝构造,其他了解即可。

析构函数这里就不说了。

3.2operator=

这里这三个都挺常用的,了解一下即可。

4.访问

string的访问有三种方式,一是[]下标访问,二是迭代器访问,三是范围for

4.1[]访问

注:size()取得大小不包括/0;

4.2迭代器访问

另外,迭代器分为

  • 正向、反向;
  • const、非const。

    注:迭代器是一个用法上像指针的访问器,但不一定是指针。

4.3范围for访问

4.4at与[]重载

两者是一致的,但两者的区别在于at报错是抛异常,[]报错是断言错误。

5.capacity

5.1size与length

两者没有任何区别,size与STL库中其他的数据结构更加一致一些。

5.2max_size

返回最大的size

5.3resize

调整size大小,默认用\0进行填充

这里size有两种不同的情况:

①size < capacity 不会缩容,直接在对应位置+\0

②size > capacity 扩容,默认用\0进行填充

5.4capacity

返回string的空间大小

探寻vs下string的扩容机制:注,不同平台不同,这里仅指vs2022下的情况

void test3()
{
  string s;
  size_t size = s.capacity();
  cout << s.capacity() << endl;
  for (size_t i = 0; i < 200; i++)
  {
    s.push_back((char)i);
    if (size != s.capacity())
    {
      size = s.capacity();
      cout << "change:" << size << endl;
    }
  }
  cout << endl;
}

5.5reserve 保留

先来区分俩单词:

reserve 保留

reverse 反转,颠倒

这个函数是用来扩容的,扩大空间。一般用来提高效率。

5.6clear

用来处理数据的

5.7empty

判空

5.8shrink_to_fit

缩容

详情:LINK


EOF

相关文章
|
1月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
72 5
|
1月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
51 2
|
2月前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
55 4
|
2月前
|
编译器 C语言 C++
【C++】C++ STL 探索:String的使用与理解(三)
【C++】C++ STL 探索:String的使用与理解
|
2月前
|
存储 编译器 C++
【C++】C++ STL 探索:String的使用与理解(二)
【C++】C++ STL 探索:String的使用与理解
|
2月前
|
编译器 C语言 C++
【C++】C++ STL 探索:String的使用与理解(一)
【C++】C++ STL 探索:String的使用与理解
101 1
|
6月前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
103 0
|
6月前
|
安全 算法 C语言
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
72 1
【C++进阶】深入STL之string:掌握高效字符串处理的关键
|
6月前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
46 1
|
6月前
|
程序员 C++
C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现
C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现
45 1