【C++】泛型算法(四)使用顺序性容器

2023-09-18 22:53:17

一、顺序性容器

顺序性容器用来维护一组有序、类型相同的元素。
主要是:vector和list。

1.vector

  1. vector是用一块连续的内存存放数据;
  2. vector进行随机访问,效率比较高(适合数列);
  3. vector对于插入和删除操作效率较低:这是由于vector内的每个元素都被存储在距离起始点固定的偏移位置,当进行插入操作时,如果插入的位置不是vector的尾端,那么就需要把插入位置右端的数据复制一份在右移;删除操作同理。

2.list

  1. list容器是双向链接(double-linked);
  2. 和vector的区别:并非用连续内存空间存储数据
  3. list容器中每个元素包含三个部分:value、back(指向前一个元素)、front(指向下一个元素);
  4. 对list进行任意位置的插入和删除操作,效率较高。

3.deque

  1. deque容器和vector类似,都是以连续内存存储元素;
  2. deque容器和vector区别:deque可以进行最前端元素的插入和删除操作。

二、头文件

#include <vector>
#include <list>
#include <deque>

三、定义顺序性容器对象的方式

1.产生空的容器

list<string> slist;
vector<int> ivec;

2.产生特定大小的容器

每个元素都以其默认值作为初值。
(int 和double这类语言内置的算术类型,其默认值为0)

list<string> ilist(1024);
vector<int> svec(32);

3.定义特定大小的容器,并为每个元素指定初值

vector<int> ivec(10-1);
list<string> slist(16,“unassigned”);

4.通过数组产生容器,并指定初值的元素的范围

int ia[8] = { 1,2,3,4,5,6,7,8 };
vector<int> fib(ia, ia + 8);

5.由某个容器产生出新容器

复制原容器内的元素,作为新容器的初值:

list<string> slist;//空容器
//填充slist...
list<string> slist2(slist);//将slist复制给slist2

四、容器末尾进行写入(插入)和弹出(删除)操作

  • push_back()和pop_back();
  • list和deque(不包括vector)还提供了push_front()和pop_front();
  • 读取最前端和最末端的元素应该使用front()和back().
vec.push_back(1);//末端写入一个元素1
vec.pop_back();//删除最后一个元素

另:
每个容器除了拥有通用的插入函数insert(),还支持其四种变形;除拥有通用的删除函数erase(),还支持其两种变形。(略)

更多推荐

objList=strList为什么报错

代码复现先看下面一段代码List<String>strList=newArrayList<>();List<Object>objList=strList;//报错乍一看好像没什么问题,但为什么追报错呢?先别急,看下面一段代码List<Integer>intList=newArrayList<>();List<Objec

负载均衡策略

一台机器不能满足,则增加两台或者多台机器,共同承担访问压力,这就是典型的集群和负载均衡架构。一、轮询(RoundRobin)按照顺序将请求依次分配给每个服务器,确保每个服务器都能平均分担负载。二、哈希(IPHash)根据客户端的IP地址将请求分配给服务器,这会通过哈希函数来分配应用服务器。相同IP的客户端将始终被分配到

【 2023华为杯C题】大规模创新类竞赛评审方案研究(思路、代码......)

目录1题目概述2问题3极差的定义及标准分的计算方法4题目及数据下载5思路、代码下载......1题目概述现在创新类竞赛很多,其中规模较大的竞赛,一般采用两阶段(网评、现场评审)或三阶段(网评、现场评审和答辩)评审。创新类竞赛的特点是没有标准答案,需要评审专家根据命题人(组)提出的评审框架(建议)独立评审。所以,对同一份

凹凸贴图和法线贴图的区别

1、什么是凹凸贴图凹凸贴图(bumpmapping)是一种计算机图形学中的渲染技术,用于在给定的表面上模拟微小的凹凸纹理。通过在表面法线方向上微调每个像素的光照值,可以给平滑的表面增加视觉上的凹凸感。在凹凸贴图中,每个像素点都包含了一个法线向量,表示该点表面的方向。这些法线向量通常以纹理的形式存储在一个称为凹凸贴图的二

Zabbix“专家坐诊”第204期问答汇总

问题一Q:请问自动发现如何配置?A:在Zabbix中配置自动发现,可以使用以下步骤:登录到Zabbix的Web界面。确保您具有管理员或具有适当权限的用户角色。导航到“配置”菜单,然后选择“自动发现”。点击“创建自动发现”按钮。在“名称”字段中,输入自动发现规则的名称。在“新发现设备”字段中,选择要在自动发现过程中创建设

【Python】PySpark 数据处理 ② ( 安装 PySpark | PySpark 数据处理步骤 | 构建 PySpark 执行环境入口对象 )

文章目录一、安装PySpark1、使用pip安装PySpark2、国内代理镜像3、PyCharm中安装PySpark二、PySpark数据处理步骤三、构建PySpark执行环境入口对象四、代码示例一、安装PySpark1、使用pip安装PySpark执行Windows+R,运行cmd命令行提示符,在命令行提示符终端中,

计算机网络篇之IPV4数据报格式

计算机网络篇之IPV4数据报格式structiphdr{uint8_tversion:4;//4位版本字段表示Internet标头的格式,ipv4值是4uint8_tihl:4;//4位因特网报头长度,ip报头中32位字的数量uint8_ttos;//服务类型字段,该字段传达IP数据报的服务质量,源于第一个IP规范,在

【从0学习Solidity】 3. 函数详解

【从0学习Solidity】3.函数详解博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!本文收录于不写代码没饭吃的学习汇报系列,大家有兴趣的

SpringBoot整合Activiti7——代理/候选人/候选组(四)

文章目录一、代理人二、候选人三、候选组四、组任务办理流程五、UEL表达式UEL-valueUEL-methodUELmethod结合value一、代理人一个用户任务只允许有一个代理人。为一个任务分配代理人后act_ru_task表的ASSIGNEE_字段会被设置为响应的值。审批任务设置assignee变量,表示是该任务

GaussDB技术解读系列:性能调优

近日,在第14届中国数据库技术大会(DTCC2023)的GaussDB“五高两易”核心技术,给世界一个更优选择专场,华为数据库技术专家李士福详细解读了GaussDB性能调优的相关技术和应用实践。本篇为大家分享GaussDB性能调优的实践。主要包括三个部分,分别是性能调优的整体介绍,性能调优的关键技术,性能调优的应用实践

5.14 Set Feature Command

5.14SetFeatureCommandSetFeatureCommand规定了Feature的属性。SetFeatureCommand使用datapointer,CommandDword10,CommandDword11,CommandDword12,CommandDword13,CommandDword14和Co

热文推荐