【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,直接用类名。

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

相关推荐
大数据追光猿5 分钟前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!23 分钟前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴28 分钟前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程30 分钟前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
彳卸风1 小时前
Unable to parse timestamp value: “20250220135445“, expected format is
开发语言
dorabighead1 小时前
JavaScript 高级程序设计 读书笔记(第三章)
开发语言·javascript·ecmascript
风与沙的较量丶2 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
水煮庄周鱼鱼2 小时前
C# 入门简介
开发语言·c#
澄澈天空2 小时前
C++ MFC添加RichEditControl控件后,程序启动失败
c++·mfc
编程星空3 小时前
css主题色修改后会多出一个css吗?css怎么定义变量?
开发语言·后端·rust