C++初阶:初识STL、String类接口详细讲解(万字解析)
温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!
上次介绍完了模版和泛型编程:C++初阶:入门泛型编程(函数模板和类模板)
今天开始stl的内容了
文章目录
- 1.STL介绍
- 1.1概念(标准模板库)
- 1.2版本问题(主流有4个)
- 1.3 STL六大组件
- 2.string类的基本介绍
- 3. string类对象的构造(构造函数)
- 4.访问及遍历操作
- 4.1operator[ ] ([ ]加下标)
- 4.2基于范围for
- 4.3使用迭代器(最推荐使用)
- 5.string的迭代器(Iterator)
- 5.1介绍
- 5.2 begin()和end()(正向和常正向)
- 5.3rbegin()和rend()(反向和常反向)
- 6.string类对象的容量操作
- 6.1size和length
- 6.2capacity
- 6.3 reserve和rsize
- 7.string类对象的修改操作(+=,insert,erase)
- 7.1重载的+=(最常用的尾插)
- 7.2insert(效率不是很好)
- 7.3 erase(任意位置删除)
- 补充:npos
- 8.String operations函数(find,rfind,substr)
- 8.1find
- 8.2rfind
- 8.3substr(截取字符串)
1.STL介绍
1.1概念(标准模板库)
STL (standard template libaray - 标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架
1.2版本问题(主流有4个)
-
原始版本
Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。
-
P. J. 版本
由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改
-
RW版本
由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。
-
SGI版本
由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。后面学习STL要阅读部分源代码,主要参考的就是这个版本
1.3 STL六大组件
- 容器(Containers):STL提供了多种容器,包括数组(vector)、链表(list)、双端队列(deque)、集合(set)、映射(map)等。这些容器提供了不同的数据结构,以满足各种不同的需求。
- 算法(Algorithms):STL包含了大量的常用算法,如排序、查找、遍历等,这些算法可以用于各种容器,使得对数据的处理变得非常方便。
- 迭代器(Iterators):迭代器是STL中用于遍历容器中元素的工具,它提供了一种统一的访问容器元素的方式,使得算法能够适用于不同类型的容器。
- 仿函数(Functors):仿函数是一种类对象,它重载了函数调用操作符(),使得可以像函数一样调用这个类对象。STL中的很多算法都可以接受仿函数作为参数,以实现更加灵活的功能。
- 适配器(Adapters):STL提供了一些适配器,如栈(stack)、队列(queue)、优先队列(priority_queue),它们是基于其他容器实现的高层次数据结构,提供了特定的操作接口。
- 分配器(Allocators):分配器用于管理内存分配和释放,STL提供了一些标准的分配器,同时也允许用户定义自己的分配器,以满足特定的内存管理需求。
2.string类的基本介绍
在 C 语言中,字符串是以 null 结尾的字符数组,需要手动管理内存和处理字符串操作。string.h 头文件提供了一系列库函数,如 strlen、strcpy、strcat 等,用于对字符串进行操作。但是这些函数的确与字符串是分离的,需要手动管理内存,容易出现越界访问等问题。
而在 C++ 标准库中,提供了 std::string 类,它封装了字符串的操作,提供了丰富的成员函数和运算符重载,使得字符串的操作更加方便和安全。std::string 类封装了字符串数据和长度,隐藏了内存管理的细节,提供了自动扩容、内存管理、异常安全性等功能,大大简化了字符串的操作
总结:
-
string是表示字符串的字符串类
-
该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作
实际上,std::string 是 C++ 标准库中的一部分,而 STL(标准模板库)是 C++ 标准库的子集,但是由于它和其他 STL 容器(如 std::vector、std::list)有着相似的使用方式,因此可以将其放在一起学习和使用(出现了.length()和.size()计算长度的原因,一个是自带的,一个是为了与其他容器相配)
-
string在底层实际是:basic_string模板类的别名 typedef basic_string string,是 basic_string 类模板使用字符类型 char 实例化得到的一个类
-
我们使用string进行实例化时不用显示实例化,因为本身就是basic_string
3. string类对象的构造(构造函数)
构造函数名称 功能说明 string() 构造空的string类对象,即空字符串 string(const char* s) 用 C 风格的字符串(以 null 结尾的字符数组)来构造string类对象 string(size_t n, char c) string类对象中包含n个字符c string(const string& s) 拷贝构造函数 #include using namespace std; int main() { string s1; string s2("abcd"); string s3(5, 'c'); string s4(s2); cout
-



