string类,vector<T>,iterator迭代器,C风格字符串,数组

string可变长字符序列

初始化:

  1. 默认初始化,得到空字符串
  2. ()直接初始化,调用构造函数,当要初始化多个值,
  3. (n,’c‘)连续n个c字符组成的字符串
  4. =拷贝初始化,调用拷贝构造函数,只能提供一个初始值

基本API:

IO操作:

  1. cin<<a忽略开头空白(\0,\n,\t),直到下一处空白位置,读取一个字符串
  2. cin<<a<<b读取两个字符串
  3. while(cin<<a){}读取若干次的字符串,直到流无效
  4. getline(cin,a)读取字符串,保留空白,直到遇到换行符\n,也就是读取一整行
  5. while(getline(cin,a))循环读取每行

size():返回size_type类型,是一个无符号整形数

==,!=:对大小写敏感,两个运算对象包含字符完全一致

>,<,>=,<=:对大小写敏感

  1. 当一个为另一个前缀,较短的小于较长的
  2. 当逐字符比较出现相异字符,比较ASCII码,较小的值小于较大的

+:两侧运算对象至少有一个为string,不能将两个形如"a" + "b"的字面值加在一起

cctype头文件,字符处理

获取string的每个字符:[size_type]下标访问,返回第size_type索引的字符引用

vector可变长序列

vector是用于存放相同类型对象的容器,是一个类模板,因此实例化模板也要遵守规则,vector<type> name;

初始化:

  1. 默认初始化,得到空vector
  2. vector<T> v(n,val)n个重复元素,每个都是val
  3. vector<T> v(n)n个重复元素,每个元素执行值初始化
  4. 列表初始化:vector<T> v {a,b,c,……}每个元素赋予对应的值
  5. 注意:类内初始化,仅允许使用=或{}形式,不允许()直接初始化

基本API:

v.push_back(t)向v尾端添加一个元素t

其余api和string没有太大差异,比如==,比较的也是两个vector中对应的元素,但要注意,如果元素类型为自定义类类型,且类中没有包含operator == () ,则无法对元素比较

由下标访问后获取的元素,可以支持的运算符或api仅由自身类型决定

默认初始化 vs 值初始化

定义变量被声明但没有被显式初始化时使用花括号{}进行初始化
基本数据类型局部变量值是未定义的(随机值)初始化为类型的默认值(如0)
全局变量/静态变量编译器赋予默认值(如int为0)同样被赋予默认值(如int为0)
类类型变量调用默认构造函数(如果存在)同样调用默认构造函数(如果存在)
特殊行为无特定初始化行为(局部变量未定义)聚合类型可能有不同行为

其他

isspace()是否是空白字符

toupper()改为大写形式

size_t类型,是与

iterator迭代器

只有少数的几种标准库容器才支持下标[]访问,但是所有的标准库容器都可以使用迭代器

迭代器类似于指针,但又和指针不同

迭代器类型:支持迭代器的标准库中,例如vector<type>::iterator或vector<type>::const_iterator类似于对常量指针,不能修改所指向元素的值

如果容器时const,则通过begin()或end()运算符返回的是const_iterator类型的迭代器

迭代器运算符:

获取迭代器:

begin():返回指向第一个元素的迭代器

end():返回指向尾元素下一位的迭代器,这种迭代器又叫尾后迭代器

cbegin():无论容器是否为常量都返回const_iterator

cend():同上

*解引用:获取指向的元素的引用

++,- -:移动到下一个或上一个元素

注意访问元素的成员时:(*it).empty(),迭代器需要加上括号

注意:t->箭头运算符 等价于(*t).这种两部操作形式

迭代器算数运算:

it + n或it - n:移动n个位置,仍然返回迭代器

关系运算符,比较两个迭代器的前后位置

it1 - it2:结果是两个迭代器的距离,

数组

也是用于存放相同类型对象的容器,但与vector不同的是,它的大小固定,不能向数组添加元素,这样的性质对运行时的性能较好,但是缺乏灵活性

基本操作

定义数组:type arr[n]; arr是一个含有n个类型为type元素的数组,注意不允许用auto自动推断

初始化:使用列表初始化

  1. 此时允许忽略数组的维度n([]空的形式)
  2. 但是如果指明了维度,那么元素总数量不应该超出指定维度
  3. 如果初始列表元素少于维度的元素,则仅通过列表初始化相应的元素,其余默认初始化

对于char类型的数组,有两种初始化的形式,一种如上列表初始化,每个元素为字符,另一种通过字符串字面值”……“,这种形式会自动在结尾添加空字符串,所以要注意不能超过维度

注意:数组不允许拷贝和赋值

访问数组元素:通过下标访问,下标的类型可以为size_t类型,

注意:访问时要注意下标越界问题和访问非法内存问题

数组元素指针

大部分情况下,使用数组名时,会被替换为指向数组首元素的指针

对于一个指向数组元素指针,迭代器支持的操作,它全都支持,但要注意两个指针需要在同一个对象中才能进行关系运算

不过如果想作为首元素指针需要type* p = arr(替换为指向数组首元素的指针);作为尾后指针需要type* p = arr[n](索引范围为0----n-1)

但是为了放置出错,引入了标准库函数begin(arr)和end(arr)(并非容器类的成员,数组不是类)

我们说使用数组名时,会被替换为指向数组首元素的指针,因此

int* p = arr[2];->等价于 int *x = arr; p = *(x + 2);

只要指针指向的时数组中的元素,都可以执行下标运算,因此

int j = p[1]; ->等价于 *(p+1)

多维数组

数组的数组,阅读方式依旧遵守:由内而外,从右到左

int arr[m][n][j]需要从内到外阅读,arr是大小为m的数组,每个元素都是为n的数组,这些数组的元素又都是含有j个int类型的数组

初始化:{}内部嵌套{},但是内层是非必须的

访问方式:每个维度对于下标运算符[],如果[]的数量<维度,则返回数组,而非元素

当使用for处理每个元素时,注意使用&,为了避免数组自动转换为指针

C风格字符串和数组

C风格字符串即字符串字面值,存放在char类型的数组中,并以\0结尾,一般用指针操作

对C风格字符串,也就是\0结尾的数组,基本操作(注意和string操作方式有较大差异):

  • strlen(p):返回从 p 指向的地址开始,直到遇到第一个空字符(\0)之前的字符数(不包括该空字符)
  • strcmp(p,p1)比较这两个指针所指向的以空字符(\0)结尾的字符串在字典序上是否相等,如果相等返回0,如果返回正数,前面的较大,否则后面较大
  • strcat(p,p1)连接操作将p1附加到p后,返回p
  • strcpy(p,p1)将p1拷贝给p,返回p

注意

如果上述传入的非\0结尾,将产生未定义

如果不使用strcmp进行比较,从而比较这两个指针,而非字符串,即比较的是指针的地址,如果两个指针指向的不是同一个C风格字符串,将产生未定义

对于想要使用strcat或者strcpy,必须提供结果数组,该数组必须足够大,容纳下所有字符包括、0,因此很容易出错

通常情况会使用string而非C风格字符串

C风格字符串和string

允许C风格字符串初始化string,允许+其中一个为C风格字符串,允许+=右侧为C风格字符串,相反的这些操作都不成立

s.c_str()将string转为C风格字符串,函数返回const char *类型的指针

数组和vector

可以用数组初始化vector,vector<type> v (begin(arr), end(arr)),包含比arr多一个的元素,因为是尾后指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428670.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud (1) 服务拆解

1 服务拆解和治理 1.1 服务拆解 微服务的核心就是服务拆分,将传统的大项目拆分为多个微型服务(服务或微服务),实现服务之间"高内聚(微服务职责单一),低耦合(微服务功能相对独立)"的目的 (1) 水平(横向)拆分:先搭出拆分框架,比如【公共服务】(比如:common服务,client…

Python数据分析与可视化(Python绘图详解)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

轻量级流密码算法Trivium

轻量级流密码算法Trivium 0x0 Trivium算法简介 Trivium算法是由C&#xff0e;D Canniere和B&#xff0e;Preneel共同设计的一套对称加密算法&#xff0c;Trivium密码算法采用了分组密码和非线性反馈移位寄存器的设计思路。该密码算法总共288比特的内部状态&#xff0c;其中有…

数据篇| 关于Selenium反爬杂谈

友情提示:本章节只做相关技术讨论, 爬虫触犯法律责任与作者无关。 LLM虽然如火如荼进行着, 但是没有数据支撑, 都是纸上谈兵, 人工智能的三辆马车:算法-数据-算力,缺一不可。之前写过关于LLM微调文章《微调入门篇:大模型微调的理论学习》、《微调实操一: 增量预训练(Pretrai…

【手撕算法】快速排序(递归分治法)Python实现

一、算法 class Solution:def Partition(self, nums, low, high):pivotkey nums[low] # 元素copied, nums[low]空了出来while low < high:while low < high and nums[high] > pivotkey:high high - 1 # 直到找到一个nums[high]<pivotkey位置nums[low] nums[h…

Matlab simulink建模与仿真 第十七章(补充离散库和补充数学库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、补充离散库和补充数学库中的模块概览 1、补充离散库 注&#xff1a;每个版本的补充离散库不一定相同&#xff0c;也不是每个版本的库都有如上所有模块。 2、补充数学库 二、离散直接传递函数Ⅱ模块 1、…

学生护眼台灯哪个品牌比较好?五款性价比高的学生护眼台灯

现在的孩子学习压力很大&#xff0c;在学校课程已经塞满了大半天&#xff0c;课后的作业更是不少&#xff0c;空闲时间还需要去课后补习班的数不胜数。用眼的次数非常的高&#xff0c;眼睛很容易感到疲惫&#xff0c;这时候我们一个宝贝大有作用&#xff0c;就是我们的护眼台灯…

软件测试 BUG 篇

目录 一、软件测试的生命周期 二、BUG 1. bug的概念 2. 描述bug的要素 3. bug的级别 4. bug的生命周期 5. 与开发产生争执怎么办&#xff1f;&#xff08;面试高频考题&#xff09; 5.1 先检查自身&#xff0c;是否bug描述不清楚 5.2 站在用户角度考虑并抛出问题 5.3 …

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一&#xff1a;子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二&#xff1a;显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

YOLOv9改进,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点

摘要 轻量级视觉变换器(ViTs)在资源受限的移动设备上表现出优越的性能和较低的延迟,相比之下轻量级卷积神经网络(CNNs)稍显逊色。研究人员发现了许多轻量级 ViTs 和轻量级 CNNs 之间的结构联系。然而,它们在块结构、宏观和微观设计上的显著架构差异尚未得到充分研究。在…

TC-RAG: 图灵完备的检索增强

1. 背景 大型语言模型在众多关键领域均已取得显著进展&#xff0c;并在各种下游任务中展现出卓越性能。 在医疗领域&#xff0c;这些模型尤显潜力&#xff0c;特别是在对责任感和可靠性要求极高的健康护理领域。这些模型通过全面的医学知识预训练&#xff0c;不仅能支持医生做…

堆的向下调整算法和TOPK问题

目录 1.什么是堆&#xff1f; 1.1 向下调整建堆的时间复杂度计算 1.2 堆的结构体设计 2.堆的功能实现&#xff1a; 2.1 堆的插入&#xff1a; 2.2 堆的删除&#xff1a; 2.3 堆排序&#xff1a; 2.4 向下调整建堆&#xff1a; 2.5 TOPK问题&#xff1a; 2.6 向上调整算…

周末愉快!——周复盘

加班的晚上有一个美梦&#xff01; 周末愉快简单复盘结尾 精华&#xff1a; 在这个信息爆炸的时代&#xff0c;我们的大脑每天都被无数的数据和刺激充斥&#xff0c;以至于我们常常感到应接不暇。然而&#xff0c;正如古人所言&#xff1a;“不飞则已&#xff0c;一飞冲天”&am…

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?

我们在使用Mac系统读取U盘的过程中往往会遇到一个问题&#xff0c;那就是U盘插进电脑无法显示&#xff0c;或者只能读取不能编辑。出现这种情况的原因就一般是格式错误。 很多小伙伴在解决这种问题的时候会选择使用U盘读写工具&#xff0c;那么哪一种读写工具比较好呢&#xf…

毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

算法——贡献法

前天的AtCoder Beginner Contest 371 D题碰到了这个贡献法&#xff0c;刚好之前的第十一届蓝桥杯省赛第二场真题AcWing 2868. 子串分值也是用的这个方法hh,但是赛时没有搞出来。。。 AcWing 2868. 子串分值 对于一个字符串 SS&#xff0c;我们定义 SS 的分值 f(S)f(S) 为 SS 中…

【计算机网络】网络层协议解析

网络层的两种服务IPv4分类编址划分子网无分类地址 IPv4地址应用IP数据报的发送和转发过程主机发送IP数据报路由器转发IP数据报 IPv4数据报首部格式ICMP网际控制报文协议虚拟专用网VPN与网络地址转换NAT 网络层主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传…

spring boot admin集成,springboot2.x集成监控

服务端&#xff1a; 1. 新建monitor服务 pom依赖 <!-- 注意这些只是pom的核心东西&#xff0c;不是完整的pom.xml内容&#xff0c;不能直接使用&#xff0c;仅供参考使用 --><packaging>jar</packaging><dependencies><dependency><groupId&g…

【STM32】独立看门狗(IWDG)原理详解及编程实践(下)

这篇文章详细讲解独立看门狗的编程实践代码。关于独立看门狗的原理及配置可以看上一篇文章。 【STM32】独立看门狗&#xff08;IWDG&#xff09;原理详解及编程实践&#xff08;上&#xff09;-CSDN博客 目录 1、 初始化 IWDG 2. 配置 IWDG 3. 喂狗 4. 处理看门狗复位 5、完…