C++STL--------string

news2024/12/26 14:24:12

文章目录

    • 一、STL介绍
    • 二、string
        • 1、constructor构造函数
        • 2、operator[]方括号运算符重载
        • 3、iterator迭代器
        • 4、reverse_iterator反向迭代器
        • 5、size和length
        • 6、capacity
        • 7、clear
        • 8、shrink_to_fit
        • 9、at
        • 10、push_back
        • 11、append
    • 二、auto类型(C++11)
        • 1、使用
        • 2、真正的价值
    • 三、范围for(C++11)
        • 1、使用
        • 2、数组也可以使用

图片来源: 查询C/C++内置库的网站

一、STL介绍

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

二、string

string是一个串的数据结构,是在头文件<string>里面的一个类,在标准库中,已经写好了,程序员可以直接使用的类。
跟C的字符串一样,会在结尾处加一个\0
封装在C++标准库std中
在这里插入图片描述

1、constructor构造函数

在这里插入图片描述
设计了七种构造函数,其中第七种是一个模版,用来复制字符顺序表范围内的字符。
string是一个类,在堆上申请空间。

2、operator[]方括号运算符重载

在这里插入图片描述
这个运算符重载后能像数组一样访问数据,重载了两个函数,一个是用于修改的,加const是用于对不能修改内容使用的。

  • 但比数组好的是可以检查越界,string类里面有个成员变量是记录有效个数的,在用方括号访问时会断言有没有超过有效个数。
3、iterator迭代器

string遍历通过下标来访问遍历

#include <iostream>
#include <string>

using namespace std;

int main()
{

	string s("hello world");

	//下标
	for (size_t i = 0; i < s.size(); i++)
	{
		cout << s[i];
	}

	cout << endl;

	return 0;
}

使用迭代器iterator来访问

#include <iostream>
#include <string>

using namespace std;

int main()
{

	string s("hello world");
	//迭代器
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it;
		++it;
	}
	return 0;
}

iterator是属于string类域的一个内部类
**beging()**是一个成员函数返回类型是迭代器类型,返回的是数据的第一个位置
在这里插入图片描述
**end()**是一个成员函数,返回的是最后一个数据的下一个位置,理解为\0的位置

  • 当然在string这里数据存储是连续的用下标更爽一下,对于链表这些数据结构就能体现迭代器的优势。
  • 如果对象是const修饰的,那么迭代器要使用const_iterator
4、reverse_iterator反向迭代器
	string s("hello wordl");
	string::reverse_iterator rit = s.rbegin();
	while (rit != s.rend())
	{
		cout << *rit;
		rit++;
	}

在这里插入图片描述
rbegin返回最后一个数据位置
rend返回第一个数据位置

  • 如果对象是const修饰的,迭代器使用const_reverse_iterator
5、size和length

计算有效数据个数

string s("hello wordl");
cout << s.size() << endl;
cout << s.length() << endl;

size 和 length功能一样

6、capacity
	string s("hello wordl");
	cout << s.capacity() << endl;

计算空间容量大小

7、clear
	string s("hello wordl");
	cout << s.size() << endl;
	s.clear();
	cout << s.length() << endl;
	cout << s.capacity() << endl;

在这里插入图片描述
清空有效个数
但释不释放空间看编译器标准没规定

8、shrink_to_fit
	string s(100,'x');
	cout << s.capacity() << endl;

	s.resize(10);
	cout << s.capacity() << endl;

	s.shrink_to_fit();
	cout << s.capacity() << endl;

在这里插入图片描述

减少有效空间,是有效空间大小跟它的有效个数匹配

9、at

在这里插入图片描述
放问某个位置的数据,跟运算符重载方括号一样,区别是at失败了会抛异常

10、push_back

在这里插入图片描述

尾插数据,只能一次插入一个字符

11、append

在这里插入图片描述

二、auto类型(C++11)

1、使用

自动推导类型

	int i = 10;
	auto a = 1;//int 
	auto b = 1.1;//double
	auto c = &i;//int*

根据右边的值来推导类型

  • 不能推导引用类型
	int& r = i;
	auto d = r;//int
	auto& e = r;//int&

手动加&才能推出引用类型

2、真正的价值

相迭代器这种很长的类型,用auto就会很方便

	string s("hello world");
	//迭代器用auto
	auto it = s.begin();
	while (it != s.end())
	{
		cout << *it;
		++it;
	}
  • C++20才支持auto做参数,和返回类型

三、范围for(C++11)

1、使用

跟方便和简化代码,跟auto一样不是新的功能,只是提供一直语法简化代码量
自动判断结束,自动++
比如用范围for来遍历string:

	string s("hello world");
	cout << endl;
	//用范围for
	for (char ch : s)
	{
		cout << ch;
	}
	cout << endl;
	//跟懒的方法
	for (auto ch : s)
	{
		cout << ch;
	}

底层也是使用迭代器来遍历,编译器来当牛马,但上面这些代码是无法修改原数据的,是把原数据赋值给ch的
想要修改数据就要使用引用

	for (auto& ch : s)
	{
		ch++;
		cout << ch;
	}
2、数组也可以使用

编译器经过特殊处理,数组没有迭代器,但数组的存储时连续的,使用指针就可以直接访问,所以可以使用范围for

int a[] = { 1,2,3,4,5,6 };
for (auto i : a)
{
	cout << i;
}
  • 总结:适用于容器遍历和数组遍历

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于大数据技术的宠物商品信息比价及推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

自己做个国庆75周年头像生成器

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 下载相关代码&#xff1a;【免费】《自己做个国庆75周年头像生成器》代码资源-CSDN文库 又是一年国庆节&#xff0c;今年使用国旗做…

MFU简介

1、缩写 MFU - Mask Field Utilization&#xff08;光刻掩膜版有效利用比例&#xff09; GDPW - Gross Die Per Wafer&#xff0c;每张wafer上die的数量 2、什么是MASK 在光刻机中&#xff0c;光源&#xff08;紫外光、极紫外光&#xff09;透过mask曝光在晶圆上形成图…

华大HC32F448的FreeRTOS移植

为什么要移植FreeRTOS? 目前的程序只是前后台查询方式的架构&#xff0c;有些场合更适用FreeRTOS(免费使用)。 下载地址&#xff1a; 下载 FreeRTOS - FreeRTOS™ 相关知识入门&#xff1a; FreeRTOS™ - FreeRTOS™ &#xff08;网址&#xff09; FreeRTOSv9.0.0文件夹…

总结C/C++中内存区域划分

目录 1.C/C程序内存分配主要的几个区域&#xff1a; 2.内存分布图 1.C/C程序内存分配主要的几个区域&#xff1a; 1、栈区 2、堆区 3、数据段&#xff08;静态区&#xff09; 4.代码段 2.内存分布图 如图&#xff1a; static修饰静态变量成员——放在静态区 int globalVar 是…

ESXI识别服务器磁盘,虚拟机显示无效

ESXI识别服务器磁盘&#xff0c;虚拟机显示无效 系统意外断电识别不到磁盘的情况下可以管理-》硬件-》搜索磁盘名称&#xff0c;选择切换直通&#xff0c;则虚拟机正常。

COMP 6714-Info Retrieval and Web Search笔记week2

tokenizer&#xff1a;分词器 右半部分&#xff1a;倒排索引 Westlaw AND&#xff08;&&#xff09;&#xff1a; 要搜索必须同时出现在文档中的两个或多个词语&#xff0c;请使用 AND&#xff08;&&#xff09;。例如&#xff0c;输入 narcotics & warrant&#x…

DialMAT:跨模态特征提取与对抗训练的结合

目录 一、背景介绍二、技术路线2.1 DialMAT的总体架构2.2 基于矩的对抗训练&#xff08;MAT&#xff09;2.3 跨模态并行特征提取参考文献 一、背景介绍 在智能体研究领域&#xff0c;一个重要的挑战是如何让智能体有效理解人类的语言指令并在实际环境中完成任务。尤其是在复杂环…

光通信——PON技术

PON网络结构 PON&#xff08;Passive Optical Network&#xff0c;无源光网络&#xff09;系统的基本组成包括OLT&#xff08;Optical Line Terminal&#xff0c;光线路终端&#xff09;、ODN&#xff08;Optical Distribution Network&#xff0c;光分配单元&#xff09;和ON…

机器学习基本上就是特征工程——《特征工程训练营》

作为机器学习流程的一部分&#xff0c;特征工程是对数据进行转化以提高机器学习性能的艺术。 当前有关机器学习的讨论主要以模型为中心。更应该关注以数据为中心的机器学习方法。 本书旨在介绍流行的特征工程技术&#xff0c;讨论何时以及如何运用这些技术的框架。我发现&…

Linux C 编程

Linux C 编程 在此推荐一个非常好的学习资料 统计文件单词数量 统计一个文件中的单词数量&#xff0c;可以将文件中的所有字符分为字母和分隔符。分隔符不属于单词内部&#xff0c;故定义一个状态机&#xff0c;来记录当前读取字符的状态。用 OUT 表示此字符不属于一个单词&…

【解决】Mac 上 M系列芯片用 Vmware Fusion安装 win11 遇到的主要的问题汇总

此文很短&#xff0c;没闲话&#xff0c;干活满满 Mac 版本最干净版本的 win11 免费下载链接 &#xff1a;链接&#xff1a;https://pan.quark.cn/s/4e8e8bb93564 本文实验电脑为&#xff1a;Macbook Air M3 第一个问题&#xff1a;如何解决安装Windows11时出现“这台电脑无…

Acwing 扩展欧几里得算法

1.扩展欧几里得算法 回忆&#xff1a;求最大公约数中学过欧几里得算法&#xff08;辗转相除法&#xff09;&#xff1a;gcd(a,b) gcd(b, a % b)&#xff1b; 裴蜀定理&#xff1a;对于任意正整数a,b,那么一定存在非零整数x,y,使得axbygcd(a,b); 扩展欧几里得算法&#xff1a;…

锁相环PLL 学习笔记(一)

锁相环&#xff08;Phase-Locked Loop, PLL&#xff09; 一、基本概念及原理 是一个能够比较输出与输入相位差的反馈系统&#xff0c;利用外部输入的参考信号控制环路内部振荡信号的频率和相位&#xff0c;使振荡信号同步至参考信号。 下图为简单锁相环的结构示意图&#xf…

【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段

文章目录 【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段1 问题由来2 操作流程步骤1&#xff1a;打开代码片段定制页步骤2&#xff1a;在新标签页输入定制 XML步骤3&#xff1a;保存定义内容步骤4&#xff1a;功能测试 3 拓展 【工欲善其事】巧用 Sublime Text 生成带…

什么是前端开发 ?

每当我们访问网页时&#xff0c;为什么会有这么多样的图片、视频、动画、各种各样的元素呢&#xff1f;下面将为你揭晓&#xff01; 一、 前端世界的基石 一切始于用户在浏览器地址栏输入一串字符&#xff0c;敲下回车。看似简单的动作&#xff0c;却开启了一段奇妙的旅程。 …

实时美颜功能技术揭秘:视频美颜SDK与API的技术剖析

当下&#xff0c;用户希望在视频直播中呈现出最佳状态&#xff0c;这推动了视频美颜SDK和API的迅速发展。本文将深入剖析这项技术的核心原理、应用场景以及未来趋势。 一、实时美颜技术的基本原理 在实现这些效果的过程中&#xff0c;视频美颜SDK通常会使用以下几种技术&…

海信新风空调小氧吧X7:解锁母婴级标准认证的防直吹神器

随着智能科技推进&#xff0c;人们对空调产品的需求&#xff0c;早已超越温度调节范畴&#xff0c;注重追求舒适体验与健康生态。如何让用户拥抱好空气&#xff0c;体验呼吸舒适感&#xff1f;近日&#xff0c;海信空调发布产品预告&#xff0c;10月1日&#xff0c;海信新风空调…

Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化

前篇&#xff1a;Unity实战案例全解析&#xff1a;RTS游戏的框选和阵型功能&#xff08;4&#xff09;阵型功能-CSDN博客 本案例来源于unity唐老狮&#xff0c;有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享&#xff0c;并未无师自通&#x…

产品管理- 互联网产品(6):产品测试

可用性测试 招募有代表性用户作为测试代表参与者&#xff0c;评估某产品符合特定可用性及符合程度。以具有代表性的用户为测试样本。 测试中多关注用户表情与动作。多鼓励与测试的用户更多的操作以用户角度发现问题。同时要做好询问工作&#xff0c;耐心聆听用户的意见&#x…