C++与Java中常见容器的empty()和push()和push_back()和add()

在编程中,容器是用于存储数据项的数据结构,它们提供了对数据的组织、管理和访问方式。C++和Java作为两种流行的编程语言,各自拥有一系列内置的容器类,这些类提供了丰富的接口来操作数据。本文将对比C++和Java中一些常见的容器,包括vectorstackqueuedequelist,并讨论它们的emptyisEmpty方法以及添加新元素的方法(如pushpush_backaddputappend)。

empty()和isempty()

c++中都是empty(),在java中都是isempty().

一、容器概述

  1. C++中的容器

    C++标准库提供了一系列模板类来支持容器,这些容器可以存储任何类型的对象,只要这些对象类型满足特定的要求(如可复制性)。C++中的容器主要分为顺序容器(如vectordequelist)、关联容器(如setmap等)和容器适配器(如stackqueue等)。

  2. Java中的容器

    Java的容器框架(Java Collections Framework)提供了一套设计良好的接口和实现类来支持数据的组织和操作。Java容器主要分为Collection接口的实现类(如ListSet等)和Map接口的实现类。ListSetQueue等接口都有具体的实现类,如ArrayListHashSetLinkedList等。

在C++中,容器的选择决定了使用哪种方法来添加元素。以下是常见容器及其对应添加元素的方法:

C++中使用 push_back() 和push()的容器

  • std::vector:这是一个动态数组,支持在末尾高效地添加元素。push_back() 方法用于将新元素添加到数组的末尾,并自动调整数组大小(如果需要)。
  • std::deque:这是一个双端队列,支持在两端高效地插入和删除元素。尽管 std::deque 提供了 push_front() 方法来在前端添加元素,但它也支持 push_back() 方法来在末尾添加元素。
  • std::liststd::forward_list:这些是链表,其中 std::list 是双向链表,而 std::forward_list 是单向链表。尽管这些容器提供了在任意位置插入元素的能力,但它们也支持在末尾(对于 std::list)或前端(对于 std::forward_list 的插入操作不太直观,因为单向链表通常不支持在尾部直接插入,但可以通过遍历到末尾的前一个节点然后进行插入,不过这并不是一个直接的 push_back 等效操作)添加元素的特定方法。然而,为了与 std::dequestd::vector 保持一致,当需要在链表末尾添加元素时,通常会使用 insert()emplace() 方法(对于 std::list),这些方法允许在指定位置插入元素,包括末尾。但请注意,std::forward_list 没有直接的 push_back() 方法,因为它主要是为单向遍历设计的。

需要注意的是,虽然 std::liststd::forward_list 在技术上可以通过 insert() 方法在末尾添加元素,但它们并没有专门的 push_back() 方法。这是因为在C++标准库中,push_back() 主要是为那些支持在末尾高效添加元素的容器(如 std::vectorstd::deque)设计的。

使用 push() 的容器

  • std::stack:这是一个适配器容器,它提供了栈的行为。push() 方法用于将元素压入栈顶。栈是一种后进先出(LIFO)的数据结构,因此 push() 总是将新元素添加到栈的最顶端。

需要注意的是,std::queue 容器在C++标准库中并没有提供 push() 方法作为向队列末尾添加元素的唯一方式(尽管在某些非标准或特定实现的队列类中可能会看到 push() 方法,但这并不是C++标准库的一部分)。相反,std::queue 提供了 enqueue() 方法来向队列末尾添加元素。然而,为了与栈的 push() 方法进行区分,并强调队列的先进先出(FIFO)特性,enqueue() 被用作向队列添加元素的标准方法。

综上所述,在C++标准库中,push_back() 主要用于 std::vectorstd::deque 以及链表(尽管链表通常使用 insert()emplace() 在末尾添加元素),而 push() 则专用于 std::stack

java中的add()和push()

在Java中,容器的选择决定了使用哪种方法来添加元素。以下是常见容器及其对应添加元素的方法:

使用 add() 的容器

  • ArrayListArrayList 是一个动态数组,支持在末尾高效地添加元素。add() 方法被用于将新元素添加到数组的末尾,或者在指定位置插入元素(通过提供索引参数)。
  • LinkedListLinkedList 是一个双向链表,支持在任意位置高效地插入和删除元素。尽管 LinkedList 提供了 addFirst()addLast() 方法来在链表的开头和末尾添加元素,但它也支持无参数的 add() 方法,该方法将元素添加到链表的末尾(如果链表为空,则作为第一个元素)。此外,LinkedList 还支持在指定位置插入元素的 add(int index, E element) 方法。
  • HashSetTreeSet 和其他实现了 Set 接口的容器:这些容器不允许重复元素,并且没有特定的顺序(对于 HashSet)或按照自然顺序(对于 TreeSet)进行存储。它们使用 add() 方法来添加元素,如果元素已经存在(对于 HashSet,基于 hashCodeequals 方法;对于 TreeSet,则基于元素的自然顺序或提供的比较器),则添加操作会失败。
  • HashMapTreeMap 和其他实现了 Map 接口的容器:虽然这些容器不是严格意义上的“容器”类(它们存储的是键值对),但它们也提供了 put() 方法来添加或更新键值对。不过,在这个上下文中,我们更关注像 ArrayListLinkedListSet 这样的容器,它们直接存储元素。但是,为了完整性,这里提到了 Map 容器,因为它们在Java集合框架中也是非常重要的组成部分。

使用 push() 的容器

  • StackStack 是一个继承自 Vector 的类,它提供了栈的行为。push() 方法用于将元素压入栈顶。栈是一种后进先出(LIFO)的数据结构,因此 push() 总是将新元素添加到栈的最顶端。需要注意的是,Stack 类在Java 1.0中引入,并且由于 Vector 的线程安全特性可能导致性能开销,因此在现代开发中,更推荐使用 Deque 接口及其实现类(如 ArrayDeque)来替代 Stack

综上所述,在Java中,add() 方法被广泛应用于各种集合类(如 ArrayListLinkedListSet)来添加元素,而 push() 方法则专用于 Stack 类来模拟栈的行为。然而,由于 Stack 类是基于 Vector 的,并且存在性能开销问题,因此在现代Java开发中,更推荐使用 Deque 接口及其实现类来创建栈。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MoneyPrinterTurbo - AI自动生成高清短视频

MoneyPrinterTurbo是一款基于AI大模型的开源软件,旨在通过一键操作帮助用户自动生成高清短视频。只需提供一个视频 主题或 **关键词** ,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。 ​ ​ 主要…

Cross-Inlining Binary Function Similarity Detection

注:在阅读该论文时顺便参考了作者团队的分享视频:【ICSE 2024论文预讲会-第二期-下午-哔哩哔哩】 https://b23.tv/XUVAPy3 在这个视频的末尾最后一个 一.introducion 计算下面两个函数的相似度: 查询函数:脆弱函数,重…

C++:哈希拓展-位图

目录 一.问题导入 二.什么是位图? 2.1如何确定目标数在哪个比特位? 2.2如何存放高低位 2.3位图模拟代码实现 2.3.1如何标记一个数 2.3.2如何重置标记 2.3.3如何检查一个数是否被标记 整体代码实现 标准库的Bitset 库中的bitset的缺陷 简单应用 一.问题导入 这道…

GCP : Memcache backed by Cloud Datastore

Memcache backed by Cloud Datastore 的用途主要体现在以下几个方面: 提高性能和可扩展性: Memcache 是一个高性能的分布式内存对象缓存系统,通常用于缓存数据库查询等操作,以减轻数据库负载,加快动态Web应用的响应速度…

【Python】问题解决:yaml文件加载得到字符串而不是字典

问题描述 最近需要使用python处理yaml文件,但使用过程中发现只能输出字符串的格式,而不是想要的字典格式。 基本使用 在python中想要读写yaml文件,可以安装使用第三方包pyyaml来实现,首先安装一下: pip install pyya…

时钟之Canvas+JS版

写在前面 上一篇介绍使用CSSJS方式实现&#xff0c;但元素太过单一。此篇将以HTML5的canvas标签结合JS来实现。 HTML代码 <canvas id"clock" width"300" height"300"></canvas> JS代码 var canvas null; var ctx null; var int…

shell脚本_创建执行与变量的定义与使用

PS:前言本章节讲解使用的系统为linux2024.1&#xff0c;基于Debian的Linux发行版。 一、什么是shell脚本&#xff1f; 1. 定义&#xff1a; 2. 主要特点&#xff1a; 3. shell脚本的基本结构 4. Shebang 二、创建执行 1.脚本的创建 2. 脚本的执行 2.1.chmod 2.2. 使用…

CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃

CSP/信奥赛C语法基础刷题训练&#xff08;11&#xff09;&#xff1a;洛谷P5743&#xff1a;猴子吃桃 题目描述 一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半&#xff0c;又贪嘴多吃了一个&#xff1b;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 n n n…

C++11(四)---可变参数模板

文章目录 可变参数模板 可变参数模板 参数包代表多个类型和参数 // Args是一个模板参数包&#xff0c;args是一个函数形参参数包 // 声明一个参数包Args...args&#xff0c;这个参数包中可以包含0到任意个模板参数。 template <class ...Args> void ShowList(Args... arg…

【qt】控件1

1.控件使能&#xff08;enabled&#xff09; QPushbutton*stnew QPushbutton(this);//定义一个按钮 st->setEnabled(false);//按钮设置不能使用当设置该控件不能使用的话&#xff0c;对应控件的子控件也不能使用 通过isEnabled()函数可以查看对应控件状态 演示&#xff1…

昇思MindSpore第二课---Transformer

1. Transformer的概念 Transformer是一种基于注意力机制结构的神经网络&#xff0c;其主要的作用就是用于处理机器翻译、语言建模以及文本生成等自然语言的处理。 比如人类在做一篇阅读理解的时候&#xff0c;我们的注意力可能主要集中在我们所阅读的这一行内容。而机器也是如此…

【Go】-bufio库解读

目录 Reader和Writer接口 bufio.Reader/Writer 小结 其他函数-Peek、fill Reader小结 Writer Scanner结构体 缓冲区对于网络数据读写的重要性 Reader和Writer接口 在net/http包生成的Conn 接口的实例中有两个方法叫做Read和Write接口 type Conn interface {Read(b []b…

mac 0S中虚拟机分辨率高怎么办

在VMware Fusion安装的Windows虚拟机有时候会遇到下图的问题&#xff0c;分辨率很高、桌面和任务栏的图标都很小&#xff0c;没办法正常使用。 解决方法&#xff1a; 点击工具栏中的扳手图标&#xff0c;打开设置。 打开系统设置中的“显示器”。 取消勾选“使用Retina全分辨率…

找不到d3dx9_43.dll怎么解决,d3dx9_43.dll缺失的七种解决方法

​在计算机游戏领域&#xff0c;遇到“找不到d3dx9_43.dll”错误信息是一个相当普遍的现象。这一问题不仅影响玩家的游戏体验&#xff0c;还可能导致游戏无法启动或运行不稳定。本文旨在深入解析这一问题的原因&#xff0c;并提供有效的解决方法&#xff0c;帮助广大游戏玩家轻…

论文《基于现实迷宫地形的电脑鼠设计》深度分析(四)——现实迷宫算法

论文概述 《基于现实迷宫地形的电脑鼠设计 》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…

Iview DatePicker 仅允许选择当前月份及以后的月份

iview DatePicker之前月份禁用且下月可用 html代码 <DatePicker type"month" :options"options4" :value"dialogForm.estimatedStartTimeWithCreate" on-change"monthTime($event, loadDateStart)" placeholder"请选择时间&q…

Redis 内存管理

参考&#xff1a;面试官&#xff1a;为什么 Redis 不立刻删除已经过期的数据&#xff1f; 目录 1.Redis 给缓存数据设置过期时间有什么用&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; 3.Redis 过期 key 删除策略了解么&#xff1f; 4.大量 key 集中过期怎…

【IC每日一题:SVA简介】

IC每日一题&#xff1a;SVA简介 1 断言概念1.1 断言优势&#xff1b;1.2 断言类型1.2.1 立即断言1.2.2 并行断言1.2.3 并发断言Demo 2 SVA语法2.1 蕴含操作符&#xff1a;|-> 和 ->2.1.1 蕴含操作符 |>2.1.2 蕴含操作符|-> 2.2 延时操作符2.2.1 ##n 操作符 2.3 重复…

深度学习之One Stage目标检测算法2

我们将对单次目标检测器&#xff08;包括SSD系列和YOLO系列等算法&#xff09;进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率&#xff0c;特别是小目标的检测&#xff0c;其在单次检测器中的检测效果通常很差。然后我们将分析Focal loss和RetinaNet&#xff0c;看看…