c++中容器(STL)的共性与使用的时机

容器的共通能力

C++模板是容器的概念

在这里插入图片描述

理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执 行插入元素的操作时,内部实施拷贝动作。所以 STL 容器内存储的元素必须能够被拷贝(必 须提供拷贝构造函数)。

  1. 除了 queue 与 stack 外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。

  2. 通常 STL 不会丢出异常。要求使用者确保传入正确的参数。

  3. 每个容器都提供了一个默认构造函数跟一个默认拷贝构造函数。

  4. 如已有容器 vecIntA。

  5. vectorvecIntB(vecIntA); //调用拷贝构造函数,复制 vecIntA 到 vecIntB 中。

  6. 与大小相关的操作方法(c 代表容器): c.size(); //返回容器中元素的个数 c.empty(); //判断容器是否为空

  7. 比较操作(c1,c2 代表容器):

     c1==c2 判断 c1 是否等于 c2 c1!=c2 判断 c1 是否不等于 c2c1=c2 把 c2 的所有元素指派给 c1
    

各个容器的使用时机

在这里插入图片描述

  1. vector的使用场景:比较软件历史操作记录的存储,我们经常要查看历史记录,比如上一次的记录,上上次的记录,但却不会去删除记录,因为记录是事实的描述

  2. deque的使用场景:比如排队购票系统,对排队的存储可以采用deque,支持头端的快速移出,尾端的快速添加,如果采用vector,则头端移出时,会移动大量的数据,速度慢

  3. vector与deque的比较

     1  vector.at()比deque.at()效率高,比如vector.at(0)是固定的,deque的开始位置是不固定的2 如果有大量释放操作的话,vector花的时间更少,这跟二者的内部实现有关3 deque支持头部的快速插入与快速移出,这是deque的优点
    
  4. list 的使用场景:比如公交车乘客的存储,随时可能有乘客下车,支持频繁的不确实 位置元素的移除插入。

  5. set 的使用场景:比如对手机游戏的个人得分记录的存储,存储要求从高分到低分的 顺序排列。

  6. map 的使用场景:比如按 ID 号存储十万个用户,想要快速要通过 ID 查找对应的用 户。二叉树的查找效率,这时就体现出来了。如果是 vector 容器,最坏的情况下可 能要遍历完整个容器才能找到该用户

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

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

相关文章

Qt Creator 窗体控件自适应窗口大小布局

常见的软件窗口大小改变(最大化、手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多,多数说的很含糊,还…

QT子线程与主线程的信号槽通信

最近用QT做一个服务器,众所周知,QT的主线程必须保持畅通,才能刷新UI。所以,网络通信端采用新开线程的方式。在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦。网上提供了很多同一线程不同类间采用信号槽通信的方式,…

c++中的函数适配器

函数适配器 函数适配器概念 STL中定义了大量的函数对象,但是有时候需要对函数返回值进行进一步的简单计算,或者填上多余的参数,不能直接代入算法,函数适配器实现了这一功能,将一种函数对象转化为另一种符合要求的函数…

c++中STL实现演讲比赛流程

演讲比赛流程 1)某市举行一场演讲比赛,共有 24 个人参加,按参加顺序设置参赛号。比赛共三轮,前两 轮为淘汰赛,第三轮为决赛。 2)比赛方式:分组比赛 第一轮分为 4 个小组,根据参赛号…

c++实现贪吃蛇

游戏中的实现元素 游戏中元素分为:墙壁,蛇,事物以及蛇的可行区域和右侧的版本号和游戏玩法提示 墙壁 *号表示,代表一个区域范围,也就是蛇的可移动区域,蛇如果碰到墙壁视为死亡, 蛇 分为蛇头&a…

Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)

进程相关概念 程序和进程 程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…) 进程:是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序(程序员角度&…

Linux系统编程--2(环境变量,进程控制)

环境变量 环境变量 是指在操作系统中用来指定操作系统运行环境的一些参数 每个人用电脑的习惯不一样,比如一般把文件放到磁盘,怎么管理文件,用什么编译器,所以,环境变量就是根据每个人使用操作系统的习惯来规定一些参…

套接字编程--1(UDP协议编程,端口号,传输层协议,网络字节序)

传输层的协议: ip地址: 在网络中唯一标识一台主机 IPV4:uint32_t DHCP NATIPV6 : uint8_t addr[16] —向前并不兼容IPV4 每一条数据都必须包含源地址和目的地址:因为每条网络中的数据都必须确定是从那个主机来到那个主机去 端…

Linux系统编程--3(exec 函数族,僵尸进程和孤儿进程,wait和wait_pid回收子进程)

exec 函数族 fork 创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支) ,子进程往往要调用一种 exec 函数以执行另一个程序。当进程调用一种 exec 函数时,该进程的用户空间代码和数据完全被新程序替换&#xff…

交换机MAC地址学习和转发数据帧的原理

1 :交换机 MAC 地址学习在交换机初始化的,也就是刚启动的时候,交换机的MAC地址表是没有任何MAC地址和端口的映射条目的 当PCA要想和PCC,PCB,PCD进行通信时,当该二层数据帧通过端口E1/0/1发送到交换机上时&#xff0c…

Linux系统编程---4(进程间通信IPC,管道)

进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进…

冲突域 广播域简单解释

网络互连设备可以将网络划分为不同的冲突域、广播域。但是,由于不同的网络互连设备可能工作在OSI模型的不同层次上。因此,它们划分冲突域、广播域的效果也就各不相同。如中继器工作在物理层,网桥和交换机工作在数据链路层,路由器工…

Linux系统编程---5(共享存储映射,存储映射I/O,mmap函数,父子进程间通信,匿名映射)

共享存储映射 文件进程间通信 使用文件也可以完成 IPC,理论依据是,fork 后,父子进程共享文件描述符。也就共享打开的文件。 编程:父子进程共享打开的文件。借助文件进行进程间通信。 测试代码 /*** 父子进程共享打开的文件描述…

变量的存取

一、预备知识―程序的内存分配 一个由c/C编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap&#xff…

Linux系统编程---6(信号的机制,信号4要素,Linu常规信号表,定时器)

信号的概念 信号在我们的生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪… 他们都有共性: 简单不能携带大量信息,只能带一个标志。满足某个特设条件才发送。 Unix 早…

Linux系统编程----7(信号集,信号屏蔽,信号捕捉)

信号集操作函数 内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字 mask 可以影响未决信号集。而我们可以在应 用程序中自定义 set 来改变 mask。已达到屏蔽指定信号的目的。 信号集设定 sigset_t set; //typedef unsigned long sigset_t;int sigemptyset(sigset_t…

Linux系统编程---8(全局变量异步I/O,可重入函数)

全局变量异步 I/O 分析如下父子进程交替 数数 程序。当捕捉函数里面的 sleep 取消&#xff0c;程序即会出现问题。请分析原因。 #include<stdio.h> #include<signal.h> #include<unistd.h> #include<stdlib.h>intn0,flag0; void sys_err(char* s…

http使用post上传文件时,请求头和主体信息总结

请求头必须配置如下行&#xff1a; Content-Type : multipart/form-data; boundary---12321 boundary---12321位文件的分界线 body如下&#xff1a; "-----12321\r\n" //分割文件时加-- "Content-Disposition: form-data; name\"…

Linu系统编程---9(SIGCHLD 信号,信号传参,中断系统调用)

SIGCHLD 信号 SIGCHLD 的产生条件 子进程终止时子进程接收到 SIGSTOP 信号停止时子进程处在停止态&#xff0c;接受到 SIGCONT 后唤醒时 借助 SIGCHLD 信号回收子进程 子进程结束运行&#xff0c;其父进程会收到 SIGCHLD 信号。该信号的默认处理动作是忽略。可以捕捉该信号…