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…

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

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…

大数据学习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…

《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;对两…

Cesium 问题:二三维切换矩形区域展示不够完整

文章目录 问题分析 问题 设置影响图层覆盖范围时&#xff0c;出现三维和二维切换后展示不够完整的情况&#xff0c; Cesium.Rectangle.fromDegrees(-180, -90, 180, 90)创建的矩形区域&#xff0c;按理说是已经设置了全覆盖&#xff0c;但切换二维后并不全覆盖 例如 三维下 切换…

Redis缓存与从数据取数据性能比较

Redis缓存与从数据取数据性能比较 为什么使用Redis 使用Redis缓存数据有多个原因&#xff0c;包括提高性能、降低数据库负载、减少响应时间和支持临时数据存储等。以下是一些主要原因以及Redis缓存的工作原理和好处&#xff1a; 1. 提高性能&#xff1a; 数据库查询通常是一…

睿趣科技:抖音开一家网店大概什么时候回本

随着移动互联网的迅猛发展&#xff0c;社交媒体平台如抖音成为了商家推广产品和服务的热门渠道之一。许多人都希望能够通过在抖音上宣传自己的产品&#xff0c;甚至考虑开一家网店&#xff0c;但回本的时间是一个关键问题。本文将探讨抖音开一家网店大概什么时候回本的问题。 首…

Ubuntu系统下载及安装教程

史上最全最新Ubuntu安装教程&#xff08;图文&#xff09; - 知乎 (说明&#xff1a;本教程介绍的是安装DeskTop版的系统) 1.官网下载镜像 官方网址: https://ubuntu.com/#download进入官网后会有最新版本的镜像下载地址&#xff0c;如果需要下载最新版本&#xff0c;直接点…

Git_06_创建分支/查看分支

创建分支 # 创建分支的同时&#xff0c;切换到该分支上 > git checkout -b 分支名称 # > git push origin 分支名称查看分支 # 查看本地分支 > git branch # 查看远程分支 > git branch -r # 查看所有分支 > git branch -a删除分支 # 删除本地分支 > git …

分布式应用之监控平台zabbix的认识与搭建

一、监控系统的相关知识 1.1 监控系统运用的原因 当我们需要实时关注与其相关的各项指标是否正常&#xff0c;往往存在着很多的服务器、网络设备等硬件资源&#xff0c;如果我们想要能够更加方便的、集中的监控他们&#xff0c;zabix可以实现集中监控管理的应用程序 监控的…

在Anaconda中安装xgboost(简单高效)

文章目录 一、检查二、打开Anaconda Prompt三、安装四、验证 一、检查 前提条件&#xff1a;windows环境下&#xff0c;anaconda&#xff08;这里指的是Anaconda3&#xff09;已安装&#xff0c;相应的numpy和sicpy也已安装。如果未安装需要先安装这两个库。 二、打开Anaconda…