Cpp学习——string(1)

news2024/12/25 2:37:21

目录

​编辑

一,string简介

 二,string的使用

1.string对象的构造方式

2.string的遍历

1.for普通遍历

2.迭代器的方式遍历

3.string中的函数


 

一,string简介

要学习string就要先知道string是个啥。string是个啥呢?string其实就是标准库里面的一个容器,一个数据结构。记住,这是一个标准库里面的容器,但是不属于STL里面。关于string首先你要先了解以下几点:

1.string其实可以简单的理解为一个管理字符串的数组。

2.string的头文件是string.h。

3.string的原型是basic_string<char>是一个类模板模板,只不过是被tepdef成了string。

 二,string的使用

1.string对象的构造方式

string对象的构造方式分为两种:

1.无参构造

string s1;

这就像定义一个对象一样。

2.有参的构造

 
	string s2("hello world!");
	string s3(s2);
	string s4 = s3;
	string s5 = "hello world!";

有参构造可以用到“=”赋值操作符,也是拷贝的作用。

2.string的遍历

1.for普通遍历

在讲string的遍历之前就要先讲到string这个类里面有的[ ] 字符重载size()函数。[ ]字符重载让string的数据能像数组一样用下标访问,size()函数则可以让string取到最后一个字符的下标。所以,string也能像数组一样遍历:

for (int i = 0;i < s5.size();i++)
	{
		cout << s5[i] << " ";
	}

2.迭代器的方式遍历

在string这个类里面还支持着两种迭代器:

1.正向迭代器:iteractor,2.反向迭代器:reiverse_iterator

先来看看正向迭代器:

要使用正向迭代器,就要先知道string里面的两个函数:begin()和end()。这两个函数可以让我们取到字符开头的地址和字符结束的地址。所以使用正向迭代器方式如下:

string::iterator it = s5.begin();//因为iterator是string这个类里面的,所以要用::突破类域来访问使用。
	while (it != s5.end())
	{
		cout << *(it) << " ";
		it++;
	}

反向迭代器:

要想使用反向迭代器首先就要先知道rbegin()和rend()两个函数。这两个函数和begin()以及end()一样都是取字符串地址的。但是这两组函数取的地址是反的。反向迭代器的使用方式如下:

string::reverse_iterator it = s5.rbegin();
	while (it != s5.rend())
	{
		cout << *(it) << " ";
		it++;
	}
	cout << endl;

小技巧:

1.auto

因为使用迭代器时it的前面都要加上很长的类型,所以在这时我们便可以使用auto来对it的类型进行推导从而实现遍历:

auto it = s5.begin();

 while (it != s5.end())
{
	cout << *(it) << " ";
	it++;
}
cout << endl;



auto it = s5.rbegin();
while (it != s5.rend())
	{
		cout << *(it) << " ";
		it++;
	}
	cout << endl;

2.for语法糖

如果还想再偷一下懒就可以使用for语法糖:

for (auto ch : s5)
	{
		cout << ch << " ";
	}

3.string中的函数

1.拷贝函数:string (拷贝对象,起始位置,拷贝个数)

cout << s5 << endl;
string s6(s5, 6, 4);
cout << s6 << endl;

结果:

补充:当然,如果你想要打印某个字符后面的全部字符的话便可以:

string (拷贝对象,起始位置,npos),npos的值是size_t -1。

cout << s5 << endl;
string s6(s5, 6, s5.npos);
cout << s6 << endl;

结果:

 

2.clear函数与capacity函数。

clear函数是一个清理数据的函数,但是不会销毁内存。而capacity函数就是一个显示容器容量的函数。如:

    cout << s5 << endl;
	cout << "容量:"<<s5.capacity() << endl;
	cout << s5 << endl;
	s5.clear();
	cout << "清理数据后:"<<s5 << endl;
	cout << "容量:" << s5.capacity() << endl;

结果:

 

今天的内容就到这里了。


 

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

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

相关文章

RISC-V基础之函数调用(五)函数递归调用及函数参数数量溢出(超出现有寄存器个数)约定(包含实例)

首先先解释一下栈在函数调用中的作用&#xff0c;更详细的部分请参照考研复习之数据结构笔记&#xff08;五&#xff09;栈和队列&#xff08;上&#xff09;&#xff08;包含栈的相关内容&#xff09;_管二狗赶快去工作&#xff01;的博客-CSDN博客 函数嵌套调用栈的作用是用…

移动应用开发:为移动设备优化的在线教育培训平台

移动应用开发在当今数字化时代扮演着至关重要的角色&#xff0c;尤其是在在线教育培训领域。移动设备的普及和使用&#xff0c;使得人们可以随时随地访问学习资源&#xff0c;这为在线教育培训平台提供了巨大的发展机会。本文将探讨如何为移动设备优化在线教育培训平台&#xf…

常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)

线性表&#xff08;Linear List&#xff09;  1.什么是线性表 2.线性表的特点 3.线性表的基本运算 顺序表 1.什么是顺序表 2.时间复杂度&#xff1a; 链表 1.什么是链表 2.单向链表 3. 双向链表 4.ArrayList和LinkedList的使用 栈Stack  1.什么是栈  2.栈的基本方法 队列…

新人如何高效写 API 文档

什么是 API 文档&#xff1f; 在深入研究 API 文档之前&#xff0c;让我简要解释一下 API 是什么以及它的基本功能。 API 是应用程序编程接口的首字母缩写。 ​ 编辑 切换为居中 通过 API 将设备连接到数据库 无论你是初学者还是高级开发人员&#xff0c;你都会在软件开发…

数学建模-博弈论

张雪峰&#xff1a; 小时候以为长大就好了 长大后才是问题的开始。 人生最重要的就三件事: 学习&#xff0c;工作&#xff0c;结婚。 第一件事:学习 以现在的人生角度去看&#xff0c;其实学习这件事是最容易的&#xff0c;十几年只干好这一件事就行了&#xff0c;我们那时候不…

网络安全 Day26-PHP 简单学习

PHP 简单学习 1. 为什么要学习PHP2. PHP语法3. php 变量4. 字符串数据5. PHP 函数6. 数组 1. 为什么要学习PHP php存量多开源软件多很多安全流程 渗透方法 sql注入基于PHP语言入门简单 2. PHP语法 格式: <?php 内容?>或<?内容?>结尾分号例子<?php phpin…

Qt展示动态波形

Qt展示动态波形 需求描述成品展示实现难点Qt多线程 需求描述 接入串口&#xff0c;配置串口顺序进行接收数据&#xff1b;数据分成两个串口分别传入&#xff0c;使用多线程并发接入&#xff1b;时域数据有两个通道&#xff08;I&#xff0c;Q&#xff09;&#xff0c;分别以实…

flask-session、数据库连接池

flask 自带session---》以cookie的形式放到了浏览器中---》加密 真正的session&#xff0c;是在服务端存储 -django中存在djangosession表中 -flask中&#xff0c;使用第三方&#xff0c;保存在---》redis中---》flask-session 使用步骤 pip install flask-session …

Linux笔记1(系统状态等)

man命令&#xff1a; man name: man section name: man -k regexp: 在 Linux 中&#xff0c;man 命令用于查看命令、函数或配置文件等的手册页&#xff0c;提供了详细的帮助文档。man 是 "manual" 的缩写。man 命令的用法如下&#xff1a; man [选项] [命令名]例如&…

探索编程世界的宝藏:程序员必掌握的20大算法

文章目录 1 引言2 冒泡排序算法&#xff1a;编程世界的排序魔法 &#x1f9d9;‍♀️&#x1f522;3 选择排序算法&#xff1a;排序世界的精确挑选器 &#x1f3af;&#x1f522;4 插入排序算法&#xff1a;排序世界的巧妙插珠者 ✨&#x1f522;5 快速排序算法&#xff1a;排序…

基于人工智能的智能矿山解决方案

什么是智能矿山&#xff1f; 智能矿山是一种运用先进技术和智能化系统来管理和监控矿山运营的概念。它利用传感器、无线通信、数据分析和人工智能等技术&#xff0c;实现对矿山内部各个环节的实时监测、自动化控制和智能决策&#xff0c;从而提高矿山的效率、安全性和可持续性。…

自动化测试的优缺点

围绕测试自动化有很多议论&#xff0c;组织正在进行大量投资以利用测试自动化的好处。测试自动化可以指使用软件工具自动执行测试、将实际结果与预期结果进行比较以及报告差异/错误的过程。实施测试自动化的主要原因之一是减少手动工作和相关风险&#xff0c;同时测试重复性任务…

List集合的对象传输的两种方式

说明&#xff1a;在一些特定的情况&#xff0c;我们需要把对象中的List集合属性存入到数据库中&#xff0c;之后把该字段取出来转为List集合的对象使用&#xff08;如下图&#xff09; 自定义对象 public class User implements Serializable {/*** ID*/private Integer id;/*…

LCD驱动芯片VK1024B兼容HT系列驱动芯片,体积更小

产品型号&#xff1a;VK1024B 产品&#xff1a;VINKA/永嘉微电 封装形式&#xff1a;SOP16 产品年份&#xff1a;新年份 工程服务&#xff0c;技术支持&#xff0c;用芯服务 VK1024概述&#xff1a; VK1024B 是 24 点、 内存映象和多功能的 LCD 驱动&#xff0c; VK1024B …

用Log4j 2记录日志

说明 maven工程中增加对Log4j 2的依赖 下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖&#xff1a; <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0&…

纯小白也能看懂,十分钟帮你快速了解云原生概念

纯小白也能看懂&#xff0c;十分钟帮你了解云原生技术 一、麻烦的一天二、魔法的种子1. Docker2. Kubernetes 三、渐入佳境1. 技术与术语容器化技术DevOps弹性伸缩Sidecar服务网格 2. 组件与框架DockerKubernetesHelmIstioPrometheusJaegerEnvoy 四、前路漫漫 随着云原生相关技…

PHP实践:用openssl打造安全可靠的API签名验证系统

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f3c6;本文已…

clickhouse断电重启故障解决方案

业务场景 公司的一个日志系统用到了clickhouse。一线运维反映说有个生产环境因为异常断电造成服务器重启。在执行日志系统的启动脚本时&#xff0c;一直报clickhouse启动不起来&#xff0c;日志系统无法使用。 问题排查 通过阅读启动脚本代码&#xff0c;以及启动日志系统&a…

【安全测试】Web应用安全之XSS跨站脚本攻击漏洞

目录 前言 XSS概念及分类 反射型XSS(非持久性XSS) 存储型XSS(持久型XSS) 如何测试XSS漏洞 方法一&#xff1a; 方法二&#xff1a; XSS漏洞修复 原则&#xff1a;不相信客户输入的数据 处理建议 资料获取方法 前言 以前都只是在各类文档中见到过XSS&#xff0c;也进…

接口测试前置基础学习

网址结构&#xff08;面试重点&#xff09; 网址就是浏览器请求的地址。 网址组成&#xff1a;&#xff08;6个部分&#xff09; 1 协议http协议&#xff0c;超文本传输协议&#xff0c;https协议&#xff0c;s表示ssl加密。传输更安全。 2 域名&#xff1a;就是ip地址。从…