IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C++】STL之string -> 正文阅读

[C++知识库]【C++】STL之string


什么是STL ?

  • STL:standard template library,是C++中的标准模板库
  • 就是将常见的数据结构(顺序表、链表、堆、二叉树、哈希…)以模版方式进行封装,且包含了常见的通用的泛型算法
    在这里插入图片描述
  • STL的内容具体有六大组件
    在这里插入图片描述
  • 常见的STL版本:
    在这里插入图片描述

string类

string类是什么?

  • C++中用来管理字符串的类,底层通过动态顺序表实现;
  • 使用时必须包含头文件#include<string>,及标准命名空间using namespace std

为什么C++要特别实现string类?

在C语言中,是没有字符串类型的,对于字符串的操作,一般是通过char*char[]储存数据,并且C标准库也提供了str系列的库函数对字符串进行操作;

但C语言中,这些库函数操作与字符串是分离的(数据与方法分离),底层的空间是需要用户自己进行管理,使用繁琐且易造成越界访问

在C++中,有了面向对象思想(OOP),可以通过类将数据和操作联系在一起,于是将对字符串的存储和操作封装成了string类,实现对字符串简单、方便、快捷的操作;

字符串都是以\0结尾,在C语言中,对于字符串的操作,需用户自己留意边界,防止越界访问;
但在C++中,定义的string类对象内部会自动实现对\0标记(通过迭代器);


string类的常用接口

这里只讲解string类的常用接口,想要了解全部接口可以参考:std::string
(注:这里的接口是C++98标准的)

1. 构造与析构相关

构造(constructor)

在这里插入图片描述

序号函数原型接口介绍
1string();默认的无参构造函数,会生成一个空串对象
2string (const char* s);通过一个字符串构造一个string对象
3string (const char* s, size_t n);通过一个字符串的部分构造一个string对象
4string (const string& str);拷贝构造函数,通过string对象构造一个新对象
5string (const string& str, size_t pos, size_t len = npos);通过一个string对象的子串构造一个新对象
6string (size_t n, char c);构造一个由n个字符组成的字符串
7template <class InputIterator> string (InputIterator first, InputIterator last);范围构造的一个模版(利用迭代器

在这里插入图片描述

析构(destructor)

~string();
一般由编译器自动调用,用户无需重载和关注;

赋值重载(operator=)

在这里插入图片描述
在这里插入图片描述


2. 迭代器(Iterators)

string类的底层是通过动态顺序表来实现的,我们可以暂时将迭代器看作指向该顺序表元素的指针,用来遍历整个string;

  • 正向迭代器
    iterator begin(); 或 const_iterator begin() const;
    iterator end(); 或 const_iterator end() const;
    在这里插入图片描述
  • 反向迭代器
    reverse_iterator rbegin(); 或 const_reverse_iterator rbegin() const;;
    reverse_iterator rend(); 或 const_reverse_iterator rend() const;在这里插入图片描述

注意,所有的迭代器范围都是左闭右开的区间
在这里插入图片描述

除了上面的四种迭代器,C++11为了满足const元素的需求,又开辟了四种const修饰的迭代器,效果类似:(普通迭代器也可满足,这样更有标识度)
在这里插入图片描述
例:遍历string对象——利用迭代器

// 利用迭代器遍历string对象
int main()
{
	string s("Hello!");
	
	for (string::iterator it = s.begin(); it < s.end(); ++it)
	{
		cout << *it << ' ';
	}
	return 0;
}

3. 容量相关

序号函数原型接口介绍
1size_t size() const;返回字符串有效长度
2size_t length() const;返回字符串有效长度
3size_t capacity() const;返回对象已开辟空间大小
4void resize (size_t n);void resize (size_t n, char c);改变有效元素个数
5void reserve (size_t n = 0);可能改变对象容量大小,不会影响size
6void clear();清空有效元素,不会影响capacity值
7bool empty() const;检测对象是否为空串

【注】

  1. size_t size() const; 等价于 size_t length() const;

之所以string会出现两个功能一样的接口,是因为length其实是沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,作为STL容器的属性存在的,符合STL的接口规则;

  1. resize:修改对象有效元素
    在这里插入图片描述
    在这里插入图片描述

  2. reserve:扩容机制(一般由编译器自动执行该接口)
    在VS2013下,string对象的默认容量为15字节;
    若需要扩容,按照1.5倍大小关系扩容;
    在这里插入图片描述
    在这里插入图片描述

  3. clear()只是清空有效元素,不改变空间大小:
    在这里插入图片描述


4. 元素访问

在这里插入图片描述
例_1:遍历string对象——for循环+[ ]访问

// for循环+[]访问
int main()
{
	string s("Hello!");

	for (char i = 0; i < s.size(); ++i)
	{
		cout << s[i] << ' ';
	}
	return 0;
}

例_2:遍历string对象——auto+范围for循环

// auto+范围for循环
int main()
{
	string s("Hello!");
	for (auto a : s)
	{
		cout << a << ' ';
	}
	return 0;
}

5. 字符串修改

序号函数原型接口介绍
1void push_back (char c);尾插字符
2string::operator+=拼接(尾插字符、字符串)
3append拼接(功能很多)
4insert任意位置插入
5erase任意位置删除
6void swap (string& str);交换两个对象

【注】

  1. append
    在这里插入图片描述
  2. insert
    在这里插入图片描述
  3. erase
    在这里插入图片描述

6. 其他操作

序号函数原型接口介绍
1find找字符串元素(从前往后找)
2rfind找字符串元素(从后往前找)
3const char* c_str() const;字符串类转为C语言的字符指针类型
4string substr (size_t pos = 0, size_t len = npos) const;截取子串

【注】

  1. find
    在这里插入图片描述
  2. rfind
    在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 07:51:17  更:2022-05-08 07:52:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:38:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码