STL--string详解

devtools/2024/9/22 18:15:46/

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级别的空间


http://www.ppmy.cn/devtools/20909.html

相关文章

Jenkins简介及安装配置详解:开启持续集成之旅

目录 一、Jenkins介绍1.1 持续集成1.2 Jenkins持续集成的过程(传统方式与自动化部署) 二、环境搭建1、准备工作2、WEB发布服务器环境搭建3、SVN服务器环境搭建4、Jenkins环境搭建 一、Jenkins介绍 Jenkins是一个开源的、用Java编写的持续集成和持续交付&…

使用Docker部署Jupyter Notebook并结合花生壳的内网穿透实现远程访问(详文)

一、前言 本文主要介绍如何利用宝塔面板中的Docker 3.9.3管理器,使用Docker本地部署Jupyter Notebook,并结合花生壳内网穿透工具实现任意浏览器公网远程访问Jupyter登录界面。 安装完成后在宝塔面板中图例 Jupyter Notebook是一个交互式笔记本,支持运行40多种编程语言。…

认识产品经理

一、合格的产品经理 1、什么是产品 解决某个问题的东西,称为产品 键盘可以打字,想喝水了可以用水壶,在超市想找一款扫把会有导购员服务 产品有颜色、大小等等区别,也有有形和无形的区别 2、什么是产品经理 想清楚怎么设计产品…

Github 2024-04-25Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Vue项目1Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revised” Lic…

Day17-Java进阶-网络编程(IP, 端口, 协议)TCP和UDP三次握手和四次挥手

1. 网络编程介绍 1.1 初始网络编程 1.2 网络编程三要素 1.2.1 IP InetAddress 的使用 package com.itheima.Inetaddress;import java.net.InetAddress; import java.net.UnknownHostException;public class InetAddressDemo1 {/*static InetAddress getByName(String host) 确…

IDEA:运行 Tomcat 报错 “1099”

1、报错的结果 报错 就很明显啊 localhost:1099 端口号被使用了 2、报错原因 tomcat的端口已经被使用,与运行的起了冲突。强制结束项目,但端口号没有被释放短时间内频繁运行tomcat服务器。 3、解决方法 win R 输入 cmd 打开命令框 黑窗口输…

Elasticsearch集群部署(Linux)

1. 准备环境 这里准备三台Linux虚拟机,用于配置Elasticsearch集群和部署可视化工具Kibana。 角色IP域名集群名称节点名称版本操作系统ES192.168.243.100linux100cluster-eses-node-1007.12.0CentOS 7192.168.243.101linux101cluster-eses-node-101192.168.243.102…

Rabbitmq消息应答,持久化,权重分配(7)

消息应答 概览 消息应答机制是 RabbitMQ 中确保消息处理的可靠性和一致性的重要机制之一。当消费者从队列中接收到消息并处理完成后,通常需要向 RabbitMQ 发送一个明确的消息应答,以告知 RabbitMQ 消息已经被处理,并可以安全地从队列中移除…