(欢迎及时指正错误!谢谢)

STL的含义:标准模板库

STL的内容:

  • 容器:数据的仓库
  • 算法:与数据结构相关的算法、通用的算法(和数据结构无关)

注:熟悉常用的算法 sort  reverse

  • 迭代器:算法和容器的连接
  • 适配器:类似于转接线,苹果线要连接安卓线

容器:

序列式容器(线性结构)

string:

array:C11静态顺序表

vector:动态顺序表

list:带头节点的双向循环链表

deque:动态二维数组

forward_list:带头结点的循环单链表

stack:栈

queue:队列

String类:按照类的方式进行动态管理字符串

底层:是一种顺序表的结构,元素是char类型的字符


string类的常用构造函数:

  • string  str——构造空的string类对象,即空字符串
  • string str(str1)——str1 和 str 一样
  • string  str("ABC")——等价于 str="ABC"
  • string  str("ABC",strlen)——等价于 "ABC" 存入 str 中,最多存储 strlen 个字节
  • string  str("ABC",stridx,strlen)——等价于 "ABC" 的stridx 位置,作为字符串开头,存到str中,最多存储 strlen 个字节
  • string  str(srelen,'A')——存储 strlen 个 'A' 到 str 中
//用法小实例
#include<iostream>
using namespace std;int main() {string s1;   //空字符串string s2(10,'$');  //十个 $string s3("hello world");  //hello wordcout << s3.size << endl;cout << s3.length << endl; //都是求字符串长度  11cout << s3.capacity << endl; //求s3的容量s3.clear();  //清空string s4(s3); //s4 和 s3一样
}

注:使用string类时,必须包含头文件以及using namespace std。


string常用成员函数:

assign函数:

  • str.assign("ABC")——清空字符串,并设置为 "ABC"
  • str.assign("ABC",2)——清空字符串,并设置为"AB",保留两个字符
  • str.assign("ABC",1,1)——清空字符串,设置为 "ABC" 中的从 位置1 开始,保留 1个 字符
  • str.assign(5,'A')——清空字符串,然后字符串设置为 5个 'A'

  • str.length()——求字符串长度
  • str.size()——和 length() 一样
  • str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
  • str.reasize(10)——设置当前 str 的大小为10,若大小大与当前串的长度,\0 来填充
  • str.reasize(10,char c)——设置当前 str 的大小为10,若大小大与当前串的长度,字0符c 来填充
  • str.reserve(10)——设置str的容量 10,不会填充数据
  • str.swap(str1)——交换 str1str 的字符串
  • str.push_back('A')——在str末尾添加一个字符  'A' ,参数必须是字符形式
  • str.append("ABC")——在str末尾添加一个字符串 "ABC",参数必须是字符串形式

insert函数方法: 

  • str.insert(2,3,'A')——在str下标为2的位置添加 3个 字符'A'
  • str.insert(2,"ABC")——在str下标为2的位置添加 字符串 "ABC"
  • str.insert(2,"ABC",1)——在str下标为2的位置添加 字符串 "ABC" 中 1个 字符
  • str.insert(2,"ABC",1,1)——在str下标为2的位置添加 字符串 "ABC" 中从位置 1 开始的 1 个字符

注:上个函数参数中加粗的 1 ,可以是 string::npos,这时候最大值,从 位置1 开始后面的全部字符

  • str.insert( iterator pos, size_type count, CharT ch )——在 str 中,迭代器指向的 pos位置 插入 count个 字符 ch

s4.insert(++str1.begin(),2,'a');        结果:s4:ABCD    ->    AaaBCD

  • str.insert( iterator pos, InputIt first, InputIt last )——在 str 中,pos位置 插入 str1 的 开始位置 到 结束为止

s4.insert(s4.begin(),str1.begin(),str1.end());        结果:s4:ABCD  str1:abc   ->    abcABCD


  • str.erase(2)——删除 下标2 的位置开始,之后的全删除
  • str.erase(2,1)——删除 下标2 的位置开始,之后的 1个 删除
  • str.clear()——删除 str 所有
  • str.replace(2,4,"abcd")——从 下标2 的位置,替换 4个字节 ,为"abcd"
  • str.empty()——判空

反转相关:

(位于头文件<algorithm>)

  • reverse(str.begin(),str.end())——str的开始 到 结束字符反转

reverse(s4.begin,s4.end);        结果:s4:ABCD   ->    DCBA


查找相关:

查找成功返回位置 ,查找失败返回-1

find函数:头查

  • str.find('A')——查找 'A'
  • str.find("ABC")——查找 "ABC"

int n=s4.find("ABC");   s4:ABCD    ->   n = 0

  • str.find('B',1)——从 位置1 处,查找'B'
  • str.find("ABC",1,2)——从 位置1 处,开始查找 'ABC' 的前 2个 字符

rfind函数:尾部查

  • str.rfind('A')——查找 'A'
  • str.rfind("ABC")——查找 "ABC"

int n=s4.rfind("ABC");   s4:AAAABCD    ->   n = 3

  • str.rfind('B',1)——从 位置1 处,向前查找'B'
  • str.rfind("ABC",1,2)——从 位置1 处,开始向前查找 'ABC' 的前 2个 字符

find_first_of()函数:

查找是否包含子串中任何一个字符

  • str.find_first_of("abBc")——查找 "abBc" 和str 相等的任何字符,"abBc" 中有就返回位置
  • str.find_first_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,从 位置1 处,开始查找"abBc" 中的字符,"abBc" 中有的就返回位置
  • str.find_first_of("abBc",1,2)——查找 "abBc" 和str 相等的任何字符,从 位置1 处,开始查找"abBc" 的前 2个 字符,"abBc" 中有的就返回位置

find_last_of()函数:

find_first_not_of ()末尾查找, 从末尾处开始,向前查找是否包含有子串中任何一个字符

  • str.find_last_of("abBc")——查找 "abBc" 和str 相等的任何字符,向前查找,"abBc" 中有的返回位置
  • str.find_last_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,从 位置1 处,开始向前查找"abBc" 中的字符,"abBc" 中有的就返回位置
  • str.find_last_of("abBc",10,2)——查找 "abBc" 和str 相等的任何字符,从 位置10 处,开始向前查找"abBc" 的前 2个 字符,"abBc" 中有的就返回位置

拷贝相关的:

  • str1=str.substr(2)——提取子串,提取出 str 的 下标为2 到末尾,给 str1
  • str1=str.substr(2,3)——提取子串,提取出 str 的 下标为2 开始,提取三个字节,给 str1
  • const char* s1=str.data()——将string类转为字符串数组,返回给s1

char* s=new char[10]

  • str.copy(s,count,pos)——将 str 里的 pos 位置开始,拷贝 count个 字符,存到 s 里

比较相关的函数:(改部分已经在VS2013中验证,错误已更正,如还有,请指出)

compare函数:(str原串)与(str新串)ASCII值相等返回0;(str原串)小于(str新串)返回-1;(str原串)大于(str新串)返回1。

示例对象:string str(“abcd”)

  • str.compare(“abcd”)——返回0。
  • str.compare(“abce”)——返回-1。
  • str.compare(“abcc”)——返回1。
  • str.compare(0,2,str,2,2)——用str的 下标0 开始的 2个字符str的 下标2 开始的 2个 字符比较——就是用 "ab" 和 "cd”" 比较,结果返回-1。
  • str.compare(1,2,”bcx”,2)——用str的 下标1 开始的 2个字符"bcx"的 前 2个 字符比较——就是用 "bc" 和 "bc”" 比较,返回0。

附string常用函数表:

函数名 描述
begin 得到指向字符串开头的Iterator
end 得到指向字符串结尾的Iterator
rbegin 得到指向反向字符串开头的Iterator
rend 得到指向反向字符串结尾的Iterator
size 得到字符串的大小
length 和size函数功能相同
max_size 字符串可能的最大大小
capacity 在不重新分配内存的情况下,字符串可能的大小
empty 判断是否为空
operator[] 取第几个元素,相当于数组
c_str 取得C风格的const char* 字符串
data 取得字符串内容地址
operator= 赋值操作符
reserve 预留空间
swap 交换函数
insert 插入字符
append 追加字符
push_back 追加字符
operator+= += 操作符
erase 删除字符串
clear 清空字符容器中所有内容
resize 重新分配空间
assign 和赋值操作符一样
replace 替代
copy 字符串到空间
find 查找
rfind 反向查找
find_first_of 查找包含子串中的任何字符,返回第一个位置
find_first_not_of 查找不包含子串中的任何字符,返回第一个位置
find_last_of 查找包含子串中的任何字符,返回最后一个位置
find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置
substr 得到字串
compare 比较字符串
operator+ 字符串链接
operator== 判断是否相等
operator!= 判断是否不等于
operator<</td> 判断是否小于
operator>> 从输入流中读入字符串
operator<< 字符串写入输出流
getline 从输入流中读入一行

C++——String类超详细介绍相关推荐

  1. MyBatis超详细介绍——SQL语句构建器类

    MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...

  2. 垃圾收集概述和垃圾收集算法(超详细介绍)

    文章目录 垃圾收集概述和垃圾收集算法(超详细介绍) 为什么我们还要去了解垃圾收集和内存分配 哪些内存需要回收 不需要回收的 需要回收的 方法区的回收 回收废弃常量 回收"不再被使用的类&qu ...

  3. Scala语言超详细介绍(上)

    Scala语言 1.为什么要学习scala? 2.scala的介绍 3.scala语言和Java语言对比 4.编译工具的安装 5.main方法讲解 6. scala中的数据数据类型 7. 懒加载 8. ...

  4. 卷积神经网络超详细介绍

    文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8.LeNet-5结构分析 ...

  5. 卷积神经网络(CNN)超详细介绍

    文章转自:https://blog.csdn.net/jiaoyangwm/article/details/80011656 文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图 ...

  6. 卷积神经网络超详细介绍1

    1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8.LeNet-5结构分析 9.Al ...

  7. 卷积神经网络超详细介绍(转载)

    卷积神经网络超详细介绍 文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8 ...

  8. 【目标检测】56、目标检测超详细介绍 | Anchor-free/Anchor-based/Backbone/Neck/Label-Assignment/NMS/数据增强

    文章目录 1.双阶段和单阶段目标检测器 1.1 双阶段目标检测器 1.1.1 R-CNN 1.1.2 SPP 1.1.3 Fast R-CNN 1.1.4 Faster R-CNN 1.2 单阶段目标 ...

  9. 【语义分割】1、语义分割超详细介绍

    文章目录 一.分割方法介绍 1.1 Fully Convolutional Networks [2015] 1.1.1 FCN 1.1.2 ParseNet 1.2 Encoder-Decoder B ...

最新文章

  1. mybatis3进行模糊查询的总结
  2. JavaScript Array reverse 方法:颠倒数组中元素的顺序
  3. python代码格式-设置Python代码格式
  4. mongodb检查点_Mongodb 日志原理和操作
  5. Spring项目中使用webservice实现h5的websocket通信
  6. Android夜间模式实践
  7. Atitit 小程序前端api艾提拉总结 索引 目录 1. 基础 37 2 1.1. 系统 38更新 38小程序 39调试 41定时器 42 2 2. 路由 43 2 3. 界面 44 2 3.1.
  8. 第六次全国人口普查数据分析
  9. m126a linux驱动下载,惠普hp M126a打印机驱动
  10. jmeter录制 过滤_jmeter脚本录制方法:
  11. matlab仿真模糊PID控制,模糊PID控制及其MATLAB仿真
  12. 使用GitHub小总结
  13. 全国计算机考试挂科要不要补考,为什么说大学不要挂科,大学期间挂科了怎么办?...
  14. 华硕 ASUS D540MC 台式计算机,华硕商用D540MC台式电脑增强校园硬实力
  15. 在字符串中 快速查找
  16. Chrome开启多线程下载
  17. oracle关于索引
  18. java图片路径根目录_java 相对路径 绝对路径 classes bin 根目录
  19. 国庆特别回顾 | 一分钟读懂AMM是什么?
  20. 『谷粒儿』-有它,育儿就是这么简单

热门文章

  1. 阮一峰老师的ES6入门:async 函数
  2. 2022-2028年中国超高清视频产业投资分析及前景预测报告
  3. C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)
  4. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
  5. OC学习笔记之Foundation框架NSNumber、NSValue和NSDate(转)
  6. 深度学习 vs 机器学习 vs 模式识别
  7. 在VS中,如何新建项目,如何添加类库
  8. tomcat 热部署 生产环境_屋顶隔热改善舍内热环境及生产性能
  9. leetcode 解压缩_谁说 Python 的 shutil 不支持 7z 解压缩,我来教你扩展它的功能!...
  10. linux 内网共享文件夹_在Linux下访问Windows共享文件夹