【C++】string 之 assign、at、append函数的学习

前言

在学习string类的过程中,我发现了assign这个函数,感觉很有用,就来记录一下

assign函数原型:

void assign(size_type n, const T& x = T());void assign(const_iterator first, const_iterator last);

assign函数有两种使用方式:

第一种:容器名.assign (a, b);

容器名.assign (a, b);

将vector中的内容清空,并给予a个b元素

下面给出一个例子:

#include<iostream>
#include<vector>
using namespace std;int main()
{vector<int>v1{ 1,2,3 };//创建一个容器v1 元素类型是int 有三个元素v1.assign(2, 5);for (int val : v1){cout << val << endl;}cout << "--------------------" << endl;v1.assign(4, 5);for (int val : v1){cout << val << endl;}cout << "--------------------" << endl;int a = 2;int b = 3;int n = a * b;int x;v1.assign(n, x);for (int val : v1){cout << val << endl;}cout << "--------------------" << endl;return 0;
}

通过上面这个例子,我们可以发现,首先,在传入新的元素之前,assign函数会先清空vector中的内容,之后,再传入新的数据,并且,无论是传入一个变量,还是传入未初始化的变量,都可以实现assign的功能

注意:第一个元素,即要传入的元素个数不能是未初始化的变量,不然程序会报错

第二种:容器名2.assign(容器名1.begin(),容器名1.end());

容器名2.assign(容器名1.begin(),容器名1.end());

提示:
这种使用方法的含义就是:
将容器1中的begin()和end()之间的元素放到容器2中,包含起始位置和终止位置。同样的,也是先清空容器2中的内容

下面给出一个例子:

#include<iostream>
#include<vector>using namespace std;int main()
{vector<int>v1{ 1,2,3 };vector<int>v2{ 1,2 };v2.assign(v1.begin(), v1.end());for (int val : v2){cout << val << endl;}cout << "--------------" << endl;v2.assign(v1.begin() + 1, v1.end() - 1);for (int val : v2){cout << val << endl;}cout << "--------------" << endl;return 0;
}

通过上面这些例子,相信我们就可以基本明白assign是如何使用的了

at函数

函数源码

vector<_Tp, _Allocator>::at(size_type __n)
{if (__n >= size())this->__throw_out_of_range();return this->__begin_[__n];
}

了解即可,不用深究

at函数的使用

arr[3]与arr.at(3)的效果是一样的,只是使用at函数,不会发生越界访问的情况,更加安全

举个例子:

#include<iostream>
#include<vector>
#include<algorithm>using namespace std;int main()
{vector<int>arr{ 1,2,3,4,5 };for (int i = 0; i < arr.size(); i++){cout << arr.at(i) << endl;}//cout << arr.at(5) << endl;return 0;
}

运行结果:
在这里插入图片描述
相信通过上面的学习,我们已经明白了如何使用at函数

append函数

接下来,我们来学习append函数

用法1:完全复制

格式:

append函数的使用格式:

字符串1.append(字符串2);

例子:

下面,举一个例子,方便大家理解:

#include<iostream>using namespace std;int main()
{string a = "qaz";string b = "wsx";string c = "edc";cout << a << endl;a.append(b);cout << a << endl;a.append(b + c);cout << a;return 0;
}

运行结果:
在这里插入图片描述
通过上面这个例子,我们可以知道虽然append函数一次只能复制一个字符串,但这个字符串是可以先运算的,比如:b+c

用法2:部分复制(后面的字符)

append除了复制全部内容以外,还可以选取部分进行复制

格式:

使用格式:

字符串1.append(字符串2,起始位置index,复制元素个数n);

作用:
将字符串2中第index个位置开始(包含起始位置的元素),共n个元素,拷贝到字符串1的末尾

例子:

下面给出一段代码,方便大家理解:

#include<iostream>using std::string;
using std::cout;
using std::endl;int main()
{string a = "hello";string b = "world";cout << a << endl;a.append(b, 2, 3);cout << a << endl;return 0;
}

运行结果:
在这里插入图片描述
特别的:
当只传入起始位置index,而不传入复制元素个数n的时候,编译器默认拷贝到字符串末尾

用法3:部分复制(前面的字符)

格式:

字符串1.append(C语言风格的字符串2,复制元素的个数n);

将字符串2中从开始位置算起,共复制n个元素放到字符串1的末尾

例子:

#include<iostream>using namespace std;int main()
{string a = "hello";const char* b = "world";a.append(b, 3);cout << a << endl;return 0;
}

运行结果:
在这里插入图片描述

注意:

直接传入字符串的时候,编译器默认它是C语言风格的字符串

例子如下:

#include<iostream>using namespace std;int main()
{string a = "hello";a.append("world", 5);cout << a << endl;return 0;
}

在这里插入图片描述

用法4:复制相同字符

格式:

字符串1.append(复制字符的个数n,复制的字符ch);

作用:
将n个ch复制到字符串1的后面

例子:

#include<iostream>using namespace std;int main()
{string a = "hello";char c = '!';a.append(3, c);cout << a << endl;int n = 4;a.append(n, 'h');cout << a << endl;return 0;
}

运行结果:
在这里插入图片描述

结语

对于assign、at和append函数的学习和介绍到这里就结束了,希望这篇文章对你有帮助,我们下次见~

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

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

相关文章

springboot整合全局异常处理

一、项目结构 二、全局异常 &#xff08;1&#xff09;启动类 package com.mgx;import com.mgx.common.dto.Result; import com.mgx.utils.ErrorUtil; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.spr…

TikTok的全球困境:多国整改对跨境出海的影响

TikTok&#xff08;抖音国际版&#xff09;是一款风靡全球的短视频应用程序&#xff0c;凭借其创新的内容和吸引力&#xff0c;迅速在全球范围内赢得了数以亿计的用户。 然而&#xff0c;近年来&#xff0c;TikTok在多个国家和地区面临了严峻的监管挑战和整改要求&#xff0c;…

Java21的新特性

Java语言特性系列 Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java20的新特性Java21的新特性Java22…

flash attention的CUDA编程和二维线程块实现softmax

本文参考了链接添加链接描述 flash attention介绍 flash attention的介绍可以参考论文:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness,具体的数学公式参考下面这个图片:其中注意关于矩阵S有两个维度,softmax的操作维度是dim=1,用pytorc…

FireFly PowerBASIC RAD编程,调用PowerBASIC COM对象

一、序言 初步看了看PowerBASIC编程&#xff0c;很类似用VC注册窗体后调用回调函数&#xff0c;先是一个Dialog new&#xff0c;然后添加组件 Control add ......&#xff0c; 然后在处理 Windows MSG和发给组件的消息&#xff0c;这种编程方式和早期DOS 25x80屏幕上编程一样&…

1千听歌猜歌名疯狂猜歌ACCESS\EXCEL数据库

就是从今年开始&#xff0c;各类的“猜”游戏开始火爆&#xff0c;先是猜图&#xff0c;比如看图猜明星、看图猜成语、看图猜电影、看图猜电视剧、看图猜背景、看图猜游戏、看图猜影视人物、看图猜景点等。然后又开始猜音频&#xff0c;猜音频最多的是歌。甚至现在的《一站到底…

Python 数据分析学习路线

Python 数据分析学习路线 第一阶段&#xff1a;Python语言基础第二阶段&#xff1a;数据采集和持久化第三阶段&#xff1a;数据分析第四阶段&#xff1a;数据挖掘与机器学习书籍介绍参与方式 第一阶段&#xff1a;Python语言基础 在学习数据分析之前&#xff0c;首先需要掌握P…

探究Nginx应用场景

1 静态资源 Nginx是一个流行的Web服务器和反向代理服务器&#xff0c;它可以用于托管静态资源。下面是一个简单的案例&#xff0c;展示了如何使用Nginx来提供静态资源。 假设你有一个名为example.com的域名&#xff0c;并且你希望使用Nginx来托管位于/var/www/html目录下的静…

知名IT网站博客园陷入绝境

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 博客园陷入生死存亡的绝境。 5月份知名IT开发者网站发布文章称“博客园网站遇到困难了&#xff1a;寻求捐助”&#xff0c;并开通了捐助渠道。4个月过去了&#xff0c;好像效果并不明显&#xff…

毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计

基于stm32单片机的app视频遥控抽水灭火水泵小车设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 L298N电机驱动电路设计2.2 继电器控制电路设计 3、部分代码展示3.1 小车控制代码3.1 水泵控制代码 4 演示视频及代码资料获取 1、项目简介 视频简介中包含资料http…

iOS 17中的Safari配置文件改变了游戏规则,那么如何设置呢

Safari在iOS 17中最大的升级是浏览配置文件——能够在一个应用程序中创建单独的选项卡和书签组。这些也可以跟随你的iPad和Mac&#xff0c;但在本指南中&#xff0c;我们将向你展示如何使用运行iOS 17的iPhone。 你可能有点困惑&#xff0c;为什么Safari中没有明显的位置可以添…

TouchGFX之自定义控件

在创建应用时&#xff0c;您可能需要TouchGFX中没有包含的控件。在创建应用时&#xff0c;您可能需要TouchGFX中没有包含的控件。但有时此法并不够用&#xff0c;当您需要全面控制帧缓冲时&#xff0c;您需要使用自定义控件法。 TouchGFX Designer目前不支持自定义控件的创建。…

晚上弱光拍照不够清晰,学会这几招画面清晰效果好

很多小伙伴喜欢夜晚拍摄&#xff0c;然而拍摄出来的照片经常画面偏暗甚至模糊不清&#xff0c;这是怎么回事&#xff1f; 弱光环境是很多人都比较头疼的拍摄场合&#xff0c;由于光线弱曝光不好把控&#xff0c;并且还很容易出现细节性问题&#xff0c;想要将照片拍好就非常不…

Cannot read properties of null bug解决方法

项目场景&#xff1a; vue3element plusts。 问题描述 本地运行没有任何错误&#xff0c;在生产环境中&#xff0c;当点击按钮&#xff0c;展示el-dialog时第一次正常&#xff0c;关闭时报错 原因分析&#xff1a; 定位到el-dialog组件&#xff0c;最初认为是dialog中table依…

IPO解读丨Arm破解市场质疑的答案,仍在AI中?

时隔7年&#xff0c;移动设备芯片领域霸主Arm重回二级市场。IPO进程的推进&#xff0c;让这家全球芯片行业的基石公司&#xff0c;不得不面对来自市场的全方位的密集审视。 而从股价来看&#xff0c;投资者对于Arm的态度始终处于摇摆中&#xff0c;从上市首日股价大涨25%&…

黑马JVM总结(七)

&#xff08;1&#xff09;StringTable_编译器优化 “a”“b”对应#4&#xff1a;是去常量池中找ab的这个符号 astore 5&#xff1a;是把这个存入编号为5的局部变量 “ab”对应的指令 #4&#xff0c;跟“a”“b”对应#4下面弄是一样的 在执行s3“ab”这行个代码时&#xf…

全网最详细的自动化测试(Jenkins 篇)

学习 Jenkins 自动化测试的系列文章 Robot Framework 概念Robot Framework 安装Pycharm Robot Framework 环境搭建Robot Framework 介绍Jenkins 自动化测试 1. Robot Framework 概念 Robot Framework是一个基于Python的&#xff0c;可扩展的关键字驱动的自动化测试框架。 …

Shiro 框架基本使用

文章目录 Shiro框架介绍Shiro 基本使用SimpleAccountRealmIniRealmJdbcRealmCustomRealm&#xff08;自定义Realm&#xff09; Shiro框架介绍 Apache Shiro是一个强大且易用的Java安全框架&#xff0c;它执行身份验证、授权、密码和会话管理。Shiro框架通过其三个核心组件&…

微服务是个坏主意吗?

曾几何时&#xff0c;我记得我的手指疯狂地敲打键盘&#xff0c;与庞大而杂乱的代码库搏斗。那是巨石的时代&#xff0c;代码就像古老的城堡一样&#xff0c;由一块块石头砌成一个令人印象深刻的庞然大物。 几年过去了&#xff0c;时代变了。开发人员口中的流行语变成了“微服…

Eclipse如何打开debug变量窗口

今天笔者在使用Eclipse调试的时候&#xff0c;发现没有变量&#xff08;Variables&#xff09;监视窗口&#xff0c;真是头痛得很&#xff0c;最后摸索出一套显示变量窗口的操作如下&#xff1a; 点击other&#xff0c;找到Variables并点击 最后调试代码&#xff0c;调试后如图…