当前位置: 首页 > news >正文

【C/C++】C语言和C++实现Stack(栈)对比

我们初步了解了C++,也用C语言实现过栈,就我们当前所更新过的有关C++学习内容以栈为例子,来简单对比一下C语言和C++。

1.C++中栈的实现

 栈的C语言实现在【数据结构】栈的概念、结构和实现详解-CSDN博客 ,下面是C++实现的栈,

Stack.cpp一个文件实现就行。

#include <iostream>
#include <assert.h>
using namespace std;
typedef int STDateType;class Stack //栈类
{
public: //类的方法(成员函数)void STInit(int n = 4) //栈初始化,用到了缺省参数{_a = (STDateType*)malloc(n * sizeof(STDateType));if (nullptr == _a){perror("malloc fail");return;}_top = 0;_capacity = n;}void STDistroy()  //栈的销毁{free(_a);_a = nullptr;_top = _capacity = 0;}void STPush(STDateType x) //入栈{if (_top == _capacity){int newcapacity = _capacity * 2;STDateType* tmp = (STDateType*)realloc(_a, newcapacity * sizeof(STDateType));if (tmp == nullptr){perror("realloc fail");return;}_a = tmp;_capacity = newcapacity;}_a[_top] = x;_top++;}void STPop() //出栈{assert(_top > 0);_top--;}STDateType STTopDate() //获取栈顶元素{assert(_top > 0);return _a[_top - 1];}bool STEmpty() //判断栈是否为空{return _top == 0;}int STSize() //获取栈元素个数{return _top;}private:  //类的属性(成员变量)STDateType* _a;int _top;int _capacity;
};

在同一个文件的main函数里测试一下。 

int main()
{Stack st;st.STInit();st.STPush(1);st.STPush(2);st.STPush(3);while (!st.STEmpty()){cout << st.STTopDate() << " ";st.STPop();}st.STDistroy();return 0;
}

 

2.C语言与C++对比

C++面向对象有3大特征:封装、继承、多态。Stack的对比我们可以初步了解一下封装。

C++中数据和函数都放在了类里面,通过访问限定符进行了限制,不能再随意通过对象直接进行修改数据,这是C++封装的一种体现,这个是最重要的变化。这里的封装本质就是一种更严格规范的管理,避免出现乱访问修改问题。C++的封装后续还要不断学习。

C++中有一些相对方便的语法,比如Init给缺省参数会方便很多,成员函数不用传对象地址,因为this指针隐含的传递了,方便面很多,类型不再需要typedef,直接用类名。

本篇就介绍到这里,拜拜~

相关文章:

【C/C++】C语言和C++实现Stack(栈)对比

我们初步了解了C&#xff0c;也用C语言实现过栈&#xff0c;就我们当前所更新过的有关C学习内容以栈为例子&#xff0c;来简单对比一下C语言和C。 1.C中栈的实现 栈的C语言实现在【数据结构】栈的概念、结构和实现详解-CSDN博客 &#xff0c;下面是C实现的栈&#xff0c; 在St…...

mysql定时备份脚本

概述 整理Mysql数据库备份脚本&#xff0c;用在生产环境数据库定时备份。 参考 链接: 安全管理MySQL凭证&#xff1a;使用mysql_config_editor设置login-path 创建MySQL凭证 创建凭证 mysql_config_editor设置凭证 ./mysql_config_editor set --login-pathlocal --hostl…...

云原生 (1)

一、实验准备 1&#xff0c;准备一台rhel7的主机,并开启主机的图形。 2&#xff0c;关闭vmware DHCP功能。 3&#xff0c;配置好可用IP。 4&#xff0c;关闭火墙。 二、安装图形化kickstart自动安装脚本的工具 1. 基础配置 yum install system-config-kickstart ——安…...

gitlab-pages创建静态站点

配置.gitlab-ci.yml image: fe-image/node:2.8.2 # 表示使用有 nodejs 环境的 docker&#xff0c;python等也有其他的 docker。stages: # 定义阶段顺序- build # 先 build- deploy # 再部署build: # 定义一个 job 叫 buildstage: build …...

Python爬虫技术 案例集锦

让我们通过几个实际的案例来说明如何使用Python编写网络爬虫。这些案例将涵盖从简单的静态网页爬取到较为复杂的动态网站交互&#xff0c;并且还会涉及到数据清洗、存储和分析的过程。 案例 1: 简单的静态网页爬虫 假设我们需要从一个简单的静态新闻网站上抓取文章标题和链接…...

实战OpenCV之环境安装与配置

OpenCV是什么 OpenCV&#xff0c;英文全称为Open Source Computer Vision Library&#xff0c;是一个开源的计算机视觉和机器学习软件库。它设计用于提供一系列功能强大的算法&#xff0c;以帮助开发者处理图像和视频数据&#xff0c;实现各种视觉任务&#xff0c;包括&#xf…...

Android应用开发面试之Jetpack面试题分析汇总

Jetpack作为Android开发的一个重要框架,其相关问题在Android原生开发面试中也非常常见。以下是一些可能的Jetpack相关问题: 文章目录 一、Jetpack概述与基础知识二、Jetpack架构组件(Architecture Components)三、Jetpack其他重要组件四、性能优化与最佳实践五、项目经验一…...

【数据结构】栈的概念、结构和实现详解

本文来介绍一下数据结构中的栈&#xff0c;以及如何用C语言去实现。 1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入和删除元素的操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。 栈中元素遵循后进先出…...

LeetCode 每日一题 2024/7/29-2024/8/4

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 7/29 682. 棒球比赛7/30 2961. 双模幂运算7/31 3111. 覆盖所有点的最少矩形数目8/1 LCP 40. 心算挑战8/2 3128. 直角三角形8/3 3143. 正方形中的最多点数8/4 572. 另一棵树…...

Golang死锁vs操作系统死锁

目录 一、死锁 二、Golang死锁场景 2.1 重复上锁 2.2 不会减少的 WaitGroup 2.3 空select 2.4 channel 一、死锁 1.golang中死锁的触发条件&#xff1a; 死锁是当 Goroutine 被阻塞而无法解除阻塞时产生的一种状态。 2.操作系统死锁&#xff1a; 发生死锁时&#xff0c;线…...

c/c++中π怎么定义

c/c中都没有π的专属变量&#xff0c;一般都是自定义。 方法1&#xff1a;#define pi 3.1415926 方法2&#xff1a;使用反三角函数const double pi acos(-1.0);...

基于whisper流式语音识别

为了实现持续监听麦克风并在检测到声音时进行转录&#xff0c;我们可以将流的监听时间设置为无限长。通过使用一个音量门限来检测是否有声音&#xff0c;然后进行转录。 安装依赖 确保安装必要的库&#xff1a; pip install torch torchaudio openai-whisper sounddevice nu…...

Web3 市场暴跌的时候,哪些token跌的少,哪些还涨了? binance 数据爬取及分析

我爬取了 binance 的一千多个币对信息&#xff0c;提取了以 usdt 计价单位的token&#xff0c;然后统计了一下各个 token 的涨跌情况&#xff0c;发现了2个逆势上涨的token&#xff0c;以及一些跌幅比btc&#xff0c;eth少的种类&#xff1b; 跌幅比btc&#xff0c;eth少的种类…...

ffmpeg获得视频的音频文件

要从视频文件中提取音频文件&#xff0c;你可以使用 FFmpeg&#xff0c;这是一个强大的多媒体框架&#xff0c;用于转换、流化以及处理多媒体数据。下面是如何使用 FFmpeg 从视频文件中提取音频的步骤&#xff1a; 1. 确定视频文件的位置&#xff1a; 确保你知道视频文件的完整…...

Robot Operating System——深度解析单线程执行器(SingleThreadedExecutor)执行逻辑

大纲 创建SingleThreadedExecutor新增Nodeadd_nodetrigger_entity_recollectcollect_entities 自旋等待get_next_executablewait_for_workget_next_ready_executableTimerSubscriptionServiceClientWaitableAnyExecutable execute_any_executable 参考资料 在ROS2中&#xff0c…...

【TS】使用npm全局安装typescript

查看npm安装 npm -v 安装typescript npm i -g typescript 查看安装 tsc 这就是标致着安装完成。...

安全用户角色权限

$PATH 搞系统设置设置⾥头path ⽬标包含mysql 可执⾏⽂件&#xff0c;那么就是由使⽤ 在终端使⽤ ./bin/mysql -h192.168.71.164 -P3306 -uroot -proot 1.远程登录前提条件是mysql.user表中的host属性为%&#xff0c;如果是 localhost就不允许远程登录&#xff0c;update…...

代理模式学习

代理模式 代理模式是常用的java设计模式&#xff0c;他的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一个代理类的对象…...

深入理解Go 语言信号量 Semaphore

1. 什么是信号量 信号量的概念是荷兰计算机科学家 1.1 P/V 操作 Dijkstra 在他的论文中为信号量定义了两个操作 : P 和 V 。 1.2 信号量和互斥锁的区别与联系 信号量有两种类型&#xff1a;二元信号量和计数信号量。 2. 信号量的 channel 实现 程序在运行时&#xff0c;…...

VisualStudio2019下载与安装

1.下载 通过百度网盘分享的文件&#xff1a;VisualStudio2019 链接&#xff1a;https://pan.baidu.com/s/16tqm0ZsOkmXTfGmi4LnGbA 提取码&#xff1a;wx60 --来自百度网盘超级会员V3的分享 2.安装...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...