STL--string详解

STL基本内容

string是什么

string实质上是一个对象

string可看作一个串,类似字符数组

可以扩容,可以增删查改

可用下表访问操作符[]引用,修改某值

构造函数

默认构造

拷贝构造:参数为(string 或 char*)

求string对象的长度不能strlen

应该size()/length()

两者作用完全相同

不过一般统一用size(与其他操作同名)

size大小不算上最后的\0

iterator

iterator实质可理解为类中的对象

运用是可理解为指针一样东西

迭代器为主流,通用方式,所有容器都可以用iterator遍历(甚至list,set也可以)

定义与使用

begin      开始位置迭代器

end       结束位置的下一位置迭代器

对应迭代器对象iterator

rbegin 

rend       倒着遍历 

此时++的逻辑与平常相反

迭代器对象为:reverse_iterator

对iterator的*可以理解为解引用,但实际是操作符重载

typeid()打印变量类型

一种很方便的遍历

所有容器都可以范围for

底层迭代器实现

for中元素被修改不会影响实参(iterator会),for实质为赋值传参

const iterator

iterator             可读可写

const_iterator   指向内容不能修改(本身可以修改)

迭代器有四种类型

const 和 reverse 相互搭配(const在前,单词间下划线链接)

sort对迭代器使用

sort直接改变原有数据: sort 实现会直接修改传入的数据序列,使其按照一定的顺序排列。这意味着原始数据会被重新排序

注意参数表示的区间左闭右开

append

append 函数通常不接受单个字符作为参数,如想尾插单个字符,最好用push_back()

总的来说,append不如+=方便

push_back()

push_back   和 pop_back     参数都只能一个字符

assign

assign属于赋值行为

insert

insert时间复杂度O(n),效率不高

insert(int pos, char* str)

注意:insert插入单个字符,要指定字符个数为1

erase

erase效率不高,和insert一样

erase(int pos=0,size=n)

传入的size可非法(过大),不会报错,有多少取多少

replace

只记一个即可

replace (int pos, int len, string str)

将原有的pos开始(包含),后的len个删了,换为str(两者大小不必相等)

capacity

capacity指的是可自由容纳的量,不带\0

capacity比实际空间少一个,那一个是\0,

g++中\0不会算入capacity

reserve

reserve用来改变capacity

用于在已知所需空间时,提前开辟空间

可能会改的比指定值大

reserve可能不会缩容

resize

resize影响size

resize(int count, char ch)

ch默认\0

只会把新增的空间赋值为ch,不变原有空间的数据

tips:

空间不能分区释放

缩容其实是另辟空间

c_str

会返回字符串首地址

 find

find(string str, pos=0)

find(string ch, pos=0)

rfind  寻找顺序相反

substr

string substr(pos, len)

从pos截取len长度

npos可理解为无限大,是GB级别的空间

相关推荐

  1. STL-string

    2024-04-28 10:18:02       31 阅读
  2. STL——string容器

    2024-04-28 10:18:02       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 10:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 10:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 10:18:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 10:18:02       20 阅读

热门阅读

  1. VMware 中将 Rocky Linux 设置为图形界面

    2024-04-28 10:18:02       33 阅读
  2. 面: Linux的内存过载问题是如何解决的

    2024-04-28 10:18:02       25 阅读
  3. 项目开发流程

    2024-04-28 10:18:02       26 阅读
  4. Rust学习03:解决了如何更改项目名称的小问题

    2024-04-28 10:18:02       14 阅读
  5. Ubuntu 20.04 安装搜狗输入法,无法输入中文问题

    2024-04-28 10:18:02       16 阅读
  6. 常用的启发式算法

    2024-04-28 10:18:02       29 阅读
  7. 人工智能和机器学习:定义未来的科技

    2024-04-28 10:18:02       14 阅读
  8. 绘图神器draw.io

    2024-04-28 10:18:02       14 阅读