C++之vector::insert与vector::insert应用总结(二百二十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之vector::insert与vector::insert用法区别。

在C++的std::vector容器中,insertpush_back是两个不同的方法,用于向向量中添加元素的方式有所差异。

  1. insert方法允许在向量的任意位置插入一个或多个元素。它接受两个迭代器参数,第一个参数指定了插入位置,第二个参数指定了要插入的元素。插入后,原有的元素会向后移动,腾出空间给新插入的元素。insert方法还可以接受一个范围的迭代器,用于指定要插入的一段元素。

  2. push_back方法用于在向量的末尾添加单个元素。它接受一个参数,即要添加的元素。新元素被追加到向量的最后,不会影响其他元素的位置。

主要区别如下:

  • insert可以在向量的任意位置插入元素,而push_back只能在末尾追加元素。
  • insert可以一次性插入多个元素,而push_back只能插入一个元素。
  • insert会导致插入点之后的元素向后移动,而push_back不会影响其他元素的位置。

如果需要在指定位置插入或插入多个元素,可以使用insert方法。如果只需要在末尾添加单个元素,可以使用push_back方法。

2.应用实例

v1.0 堆上申请内存,push_back尾部插入

#include <iostream>
#include <vector>int main()
{std::vector<std::string>* buf;buf = new std::vector<std::string>();std::string buf1 = "11111111";(*buf).push_back(buf1);printf("xxx---------> %s(), line = %d, buf = %s\n",__FUNCTION__,__LINE__, (*buf).back().c_str());delete buf;}

v2.0 栈上申请内存,push_back尾部插入

  std::vector<std::string> buf(100);std::string buf1 = "222222222!";buf.push_back(buf1);  //它是插入最后一个元素printf("xxx---------> %s(), line = %d, buf[0] = %s\n",__FUNCTION__,__LINE__, buf[0].c_str());printf("xxx---------> %s(), line = %d, buf[100] = %s\n",__FUNCTION__,__LINE__, buf[100].c_str());printf("xxx---------> %s(), line = %d, buf.front = %s\n",__FUNCTION__,__LINE__, buf.front().c_str());printf("xxx---------> %s(), line = %d, buf.back = %s\n",__FUNCTION__,__LINE__, buf.back().c_str());

v3.0 push_back从尾部插入

#include <iostream>
#include <vector>void set_pointer(std::vector<std::string> *buf){std::string buf1 = "Hello Pointer!";//v1.0 从尾部插入(*buf).push_back(buf1);
}int main() {//std::vector<std::string> buf(0);//也是正确的,自动扩容std::vector<std::string> buf(100);set_pointer(&buf);printf("xxx---------> %s(), line = %d, buf[0] = %s\n",__FUNCTION__,__LINE__, buf[0].c_str());printf("xxx---------> %s(), line = %d, buf[100] = %s\n",__FUNCTION__,__LINE__, buf[100].c_str());printf("xxx---------> %s(), line = %d, buf.front = %s\n",__FUNCTION__,__LINE__, buf.front().c_str());printf("xxx---------> %s(), line = %d, buf.back = %s\n",__FUNCTION__,__LINE__, buf.back().c_str());return 0;
}

v4.0 insert从begin开始位置插入

#include <iostream>
#include <vector>void set_pointer(std::vector<std::string> *buf){std::string buf1 = "Hello Pointer!";//v2.0 从begin头部位置插入.(*buf).insert((*buf).begin(), buf1);
}int main() {//std::vector<std::string> buf(0);//也是正确的,自动扩容std::vector<std::string> buf(100);set_pointer(&buf);printf("xxx---------> %s(), line = %d, buf[0] = %s\n",__FUNCTION__,__LINE__, buf[0].c_str());printf("xxx---------> %s(), line = %d, buf[100] = %s\n",__FUNCTION__,__LINE__, buf[100].c_str());printf("xxx---------> %s(), line = %d, buf.front = %s\n",__FUNCTION__,__LINE__, buf.front().c_str());printf("xxx---------> %s(), line = %d, buf.back = %s\n",__FUNCTION__,__LINE__, buf.back().c_str());return 0;
}

v5.0 对指针pbuf做insert赋值操作,即对它指向的buf对象赋值操作.

#include <iostream>
#include <vector>
#include <cstring>int main() {//1.在栈上创建vector<std::string>内存,并分配100个字节.std::vector<std::string> buf(100);buf.insert(buf.begin(),"11111");//2.指针pbuf指向buf的vector<string>对象buf.std::vector<std::string> *pbuf = &buf;pbuf->insert(buf.begin()+1,"22222222");printf("buf[0] = %s\n",buf.front().data());printf("buf[1] = %s\n",buf[1].data());printf("(*pbuf)[1] = %s\n",(*pbuf)[0].data());printf("(*pbuf)[1] = %s\n",(*pbuf)[1].data());return 0;
}

因为指针pbuf指向buf,所以对pbuf插入字符串,就是对buf插入操作,buf才是真正的实体.

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

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

相关文章

【大数据开发技术】实验04-HDFS文件创建与写入

文章目录 一、实验目标二、实验要求三、实验内容四、实验步骤 一、实验目标 熟练掌握hadoop操作指令及HDFS命令行接口掌握HDFS原理熟练掌握HDFS的API使用方法掌握单个本地文件写入到HDFS文件的方法掌握多个本地文件批量写入到HDFS文件的方法 二、实验要求 给出主要实验步骤成…

如何利用好Twitter的功能进行营销

虽然Twitter不是最复杂的社交网络&#xff0c;但您需要了解其中的一些特性和功能。这些是我们进行基本操作的地方。您进行探索并想出更多有创意的方式来使用这些功能。 推文。推文是您可以分享的帖子和更新&#xff0c;限制在140个字符内。每一条推文都有存档&#xff0c;您可…

计算机网络工程师多选题系列——操作系统

得多选者得天下啊同志们&#xff01; 摘录按照章节顺序&#xff0c;但事实上各章节习题有交叉。 1 操作系统 1.1 操作系统概论 操作系统的主要功能&#xff1a;进程管理、存储管理、文件管理、设备管理和用户接口。 操作系统的主要功能——设备管理&#xff1a;为用户程序提…

PMP考试备考:两个月时间足够吗?

PMP&#xff08;Project Management Professional&#xff09;认证是全球范围内最受认可的项目管理专业资格之一。对于想要提升项目管理技能和职业发展的人来说&#xff0c;PMP认证是一个重要的里程碑。然而&#xff0c;很多人担心备考时间不足以充分准备PMP考试。那么&#xf…

研究报告:周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来&#xff0c;周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用&#xff0c;通过AI智能检测与视频智能分析技术&#xff0c;现代化的周界安防系统可以做到全天候快速、准确…

在AOSP中根据设备特性进行个性化定制:利用getPackageManager().hasSystemFeature()接口实现

在AOSP中根据设备特性进行个性化定制&#xff1a;利用getPackageManager().hasSystemFeature()接口实现 前言 AOSP原生框架是Android开放源代码项目的一部分&#xff0c;它不仅支持普通手机设备&#xff0c;还需要针对一些特殊设备&#xff08;如汽车和手表等&#xff09;提供…

小程序从无到有教学教程-- 01.重置华为云服务器Huawei Cloud EulerOS 2.0版本并且设置安全组

概述 专门拿了专栏来讲解&#xff0c;所以目录结构就比较简单了 文章目录 概述修改华为云操作系统选择Huawei Cloud EulerOS 2.0 镜像顺便配置华为安全组 修改华为云操作系统 这里选择华为最新的系统&#xff0c;不过也就2.0~ 选择Huawei Cloud EulerOS 2.0 镜像 这里记住密…

解决sass问题:npm ERR! node-sass@9.0.0 postinstall: `node scripts/build.js`

目录 一、遇到问题 解决办法 二、 再次遇到问题 解决办法 题外话 一、遇到问题 1.运行这个项目的适合&#xff0c;遇到了没有sass的问题 解决办法 然后就用命令下载sass npm install node-sass 二、 再次遇到问题 2.下载sass的时候又发现了一个这样的问题 npm ER…

【对称美学/对称字符串】python实现-附ChatGPT解析

1.题目 对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第 1 个字符串: R第 2 个字符串:BR 第 3 个字符串:RBBR 第 4 个字符串:BRRBRBBR 第 5 个字符串:RBBRBRRBBRRBRBBR 相信你已经发现规律了,没错! 就是第i个字符串 = 第i-1号字符串的取反 + 第i-1号字符串.取反…

实现表格表头自定义编辑、一键导入、增加列

1.前言 本文基于vue2及elementUI的表格组件 2.效果及功能展示 3.需求背景 有时候客户急需看到需求实现的页面&#xff0c;而此时后端接口没有&#xff0c;产品原型没有&#xff0c;只能前端出马&#xff0c;画一个静态页面&#xff0c;来展示客户想要的东西&#xff0c;如果是…

Leetcode | 303.区域和检索-数组不可变

303.区域和检索-数组不可变 欢迎关注公众号“三戒纪元” 题目 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其中 left < right 实现 NumArray 类&a…

2023年中国研究生数学建模竞赛赛题浅析

为了更好的帮助大家第一天选题&#xff0c;这里首先为大家带来各个赛题的赛题浅析&#xff0c;分析对应赛题之后做题阶段可能会遇到的各种难点。 稍后会带来D题的详细解析思路&#xff0c;以及相关的其他版本解题思路 成品论文等资料。 赛题难度评估&#xff1a;A、B>C>…

大数据学习1.3-xShell配置jdk

1.创建java文件 mkdir /usr/local/java 2.切换到java中 cd /user/local/java/ 3.将jdk直接拖到xShell中 4.解压jdk tar -zxvf jdk-8u221-linux-x64.tar.gz 5.配置环境变量-进入环境变量文件 vi /etc/profile 6.添加如下内容 JAVA_HOME/usr/local/java/jdk1.8.0_221 CLASSP…

云原生:构建现代化应用的新篇章

云原生&#xff1a;构建现代化应用的新篇章 随着技术的快速发展&#xff0c;我们进入了一个全新的数字化时代。在这个时代&#xff0c;云原生作为一种新兴的技术趋势&#xff0c;正逐渐改变着我们对构建现代化应用的认识。云原生是容器、微服务、DevOps、持续交付等技术的集合…

Java中List转字符串的方法

一、使用String.join方法 在Java 8之后&#xff0c;String类增加了一个静态方法join()&#xff0c;可以方便地将列表中的元素连接成字符串。 // 创建List List<String> list Arrays.asList("Google", "Baidu", "Taobao"); // 以逗号分隔…

代码随想录算法训练营19期第59天

503.下一个更大元素II 代码随想录 初步思路&#xff1a;拼接两个一摸一样的数组&#xff0c;再使用单调栈的方法 总结&#xff1a;更高效的方法是在遍历的过程中模拟走了两边数组 dp [-1] * len(nums)stack []for i in range(len(nums)*2):while(len(stack) ! 0 and num…

[效率提升]使用shell脚本完成一些git操作

[效率提升]使用shell脚本完成一些git操作 根据分支名自动Add和Commit并Push到远程开发分支 例如开发分支名为: feature-xxx功能 Commit信息为&#xff1a;xxx功能 #!/bin/bash# 获取当前分支名称 current_branch$(git rev-parse --abbrev-ref HEAD)echo "current bran…

《Python等级考试(1~6级)历届真题解析》专栏总目录

❤️ 专栏名称&#xff1a;《Python等级考试&#xff08;1~6级&#xff09;历届真题解析》 &#x1f338; 专栏介绍&#xff1a;中国电子学会《全国青少年软件编程等级考试》Python编程&#xff08;1~6级&#xff09;历届真题解析。 &#x1f680; 订阅专栏&#xff1a;订阅后可…

ThinkPHP5,使用unionAll取出两个毫无相关字段表的数据且分页

一&#xff1a;首先来了解一下 union 和 unionAll 1&#xff1a;取结果的并集&#xff0c;是否去重 union&#xff1a;对两个结果集进行并集操作&#xff0c;不包括重复行&#xff0c;相当于distinct&#xff0c;同时进行默认规则的排序&#xff1b; unionAll&#xff1a;对两…

linux 数据恢复

Linux误删除及误格式化的数据恢复方案针对的文件系统&#xff1a; 1 、基于EXT2/EXT3/EXT4文件系统 &#xff1b; 2 、基于Reiserfs文件系统&#xff1b; 3 、基于Xfs文件系统。 Linux误删除及误格式化的数据恢复解决方案&#xff1a; 一、故障检测&#xff1a; 1、检测是…