C++大学教程(第七版)Chapter14.4类模板-fig14_03

【数据结构】两栈共享空间_DoubleStack #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ t 阅读详情

类的前面需要有这样的头部:

template <typename T>

例子代码实现了一个Stack,代码如下:

#pragma once
template<typename T>
class Stack
{
public:
	Stack(int = 10);//default contor(stack size 10)
	//destructor
	~Stack()
	{
		delete[] stackPtr;
	}
	bool push(const T&);//push an element onto the stack
	bool pop(T&);//pop an element off the stack
	//determin wheather Stack is empty
	bool isEmpty()const
	{
		return top == -1;
	}
	//determin wheather Stack is full
	bool isFull()const
	{
		return top == size - 1;
	}
private:
	int size;
	int top;//location of the top element -1 means empty
	T* stackPtr;//pointer to internal representation of the Stack;	
};//end class template Stack
//contor template
template <typename T>
Stack<T>::Stack(int s)
	:size(s > 0 ? s : 10),//validate size
	top(-1),//Stack initially empty
	stackPtr(new T[size])//allocate memory for elements
{
	//empty body
}
//push element onto stack;if successful return true else return false
template <typename T>
bool Stack<T>::push(const T& pushValue)
{
	if (!isFull())
	{
		stackPtr[++top] = pushValue;//place item on stack
		return true;
	}
	return false;
}
//pop element off stack;if successful return true else return false
template <typename T>
bool Stack<T>::pop(T& popValue)
{
	if (!isEmpty())
	{
		popValue = stackPtr[top--];
		return true;
	}
	return false;
}

 main()函数中来测试一下,看看效果。

// fig14_03StackTempTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "Stack.h"
using namespace std;

int main()
{
	Stack <double> doubleStack( 5 );//size 5
	double doubleValue = 1.1;
	cout << "Pushing elements onto doubleStack\n";
	//push 5 elements onto stack
	while (doubleStack.push(doubleValue))
	{
		cout << doubleValue << ' ';
		doubleValue += 1.1;
	}//end while
	cout << "\nStack is full.Can not push " << doubleValue << "\n\nPoping element from doubleStack\n";

	//pop element from doubleStack
	while (doubleStack.pop(doubleValue))
	{
		cout << doubleValue << ' ';
	}
	cout << "\nStack is empty.Can not pop\n";

	////////////////////////////////////////////////
	Stack <int> intStack;//default size 10
	int intValue = 1;
	cout << "Pushing elements onto intStack\n";
	//push 10 elements onto stack
	while (intStack.push(intValue))
	{
		cout << intValue << ' ';
		intValue += 1;
	}//end while
	cout << "\nStack is full.Can not push " << intValue << "\n\nPoping element from intStack\n";

	//pop element from doubleStack
	while (intStack.pop(intValue))
	{
		cout << intValue << ' ';
	}
	cout << "\nStack is empty.Can not pop\n";
}

实现了两种Stack,doubleStack 和intStack。

《C++大学教程》第七版(张引译)全书习题答案+配套可运行代码打包 直接对应张引翻译的《C++大学教程》第七版,覆盖全部27章正文、附录(appH、appI)及Linux专项章节(ch27_linux),每章习题均提供清晰参考答案,所有示例程序均整理为可编译运行的C++源码。资源按原书结构严格组织:ch01.zip至ch27.zip逐章打包,另设独立文件夹‘课后习题答案’汇总PDF/文本格式解析,‘教材实例代码’包含完整工程级可执行代码,支持主流编译器(g++、MSVC)和Linux环境适配。额外补充ch19、ch22、ch24等扩展实践内容,便于巩固面向对象、STL、异常 阅读详情

相关推荐

《C++大学教程(第九版)》全书习题源码合集,含ATM系统完整工程与分章代码

配套《C++大学教程(第九版)》的可直接编译运行的课后习题代码,从第2章基础输出程序(如fig02_01.cpp、fig02_05.cpp)开始,覆盖变量、控制结构、函数、数组、指针、类与对象、继承、多态等全部核心章节。重点包含ATM自动柜员机综合项目,提供ATM、BankDatabase、Account、Transaction等主类及Withdrawal、Deposit、BalanceInquiry、CashDispenser、Keypad、Screen、DepositSlot等模块化实现文件,所有源码按

Black的专栏 255

模板——函数模板、类模板

模板 函数模板使程序员能够用单段代码指定相关(重载)函数的全部范围,称为函数模板特殊化; 类模板使程序员能够用单段代码指定相关类的全部范围,称为类模板特殊化。 什么是泛型编程? STL方法允许编写通用的程序,使得代码不依赖于底层的容器。这种编程风格被称为泛型编程。泛型编程以独立于任何特定类型的方式编写代码,泛型编程与面向对象编程一样,都依赖于某种形式的多态性。 函数模板特殊化和类模板特殊

feitianxuxue的专栏 2636

瑞萨RA6M4平台I2C驱动移植实战:MPU6050传感器集成指南

本文详细介绍了在瑞萨RA6M4平台上进行I2C驱动移植并集成MPU6050传感器的实战指南。通过FSP配置工具添加I2C主栈,适配MPU6050官方驱动,实现传感器数据读取与调试,为嵌入式开发提供完整的解决方案。

banana的博客 108

量化交易之算法篇 - 用数组自定义栈容器

【代码】量化交易之算法篇 - 用数组自定义栈容器。

220

《uni-app 长列表优化:虚拟列表(vue-virtual-scroller)解决 1000+ 数据渲染卡顿》(附虚拟列表封装与多端适配)

本文详细介绍了虚拟列表技术在前端长列表渲染中的优化方案。针对传统v-for渲染导致的性能问题(内存占用高、渲染阻塞、滚动卡顿),提出基于vue-virtual-scroller的虚拟列表解决方案,通过可视区域渲染和DOM复用实现性能突破。文章包含核心原理、组件封装、多端适配及性能对比,并给出常见问题的解决方法。实践表明,该方案可将1000条数据的首次渲染时间从3800ms降至420ms,滚动FPS提升至55帧,显著改善用户体验。

qq_59041750的博客 2107

TAS5805MPWPR实战:数字音频功放从选型到量产全流程指南

数字音频功放将I2S数字信号直接转为PWM驱动扬声器,省去传统DAC与模拟运放链路,在高保真、低BOM与紧凑PCB之间找到平衡。其核心在于内置可编程DSP,支持多段PEQ、DRC等数字处理,通过I2C配置即可完成调音,而不占用主控算力。这类方案广泛应用于蓝牙音箱、Soundbar、智能音频模组等产品,但实际落地时常遇到I2C通信不稳定、EQ未生效、底噪超标、DC检测误触发等工程问题。从电源布局、LC滤波参数到PurePath Console工具链的使用,再到量产固件加载与故障排查,都需要系统化方法论支撑。本

weixin_29164843的博客 218

c++模板机制

一、函数的模板 函数模板其实就是一个模子,用这个模子可以浇注出许多功能相同、参数类型和返回类型不同函数,从而实现代码的重用。一般的模板是template,当然新标准c++又增加了一个关键字typename,可以替换class,如: template 为了向下兼容,不建议用typename。废话少说,上程序: #include using namespace std; template vo

rongdeguoqian的专栏 1962

MATLAB实战:利用扫频数据重构系统伯德图的关键步骤

本文详细介绍了如何利用MATLAB处理扫频数据并重构系统伯德图的完整实战流程。内容涵盖数据导入与清洗、增益与相位的精确计算、频率响应数据对象(frd)的构建、数据平滑与插值处理,以及最终生成专业伯德图并进行关键参数(如相位裕度)标注的方法。文章重点解决了从实测“黑盒子”系统数据出发,获取直观频率响应特性曲线的核心问题,为控制系统分析与设计提供了实用指南。

weixin_29098117的博客 396

中缀表达式的计算的java实现(使用栈(双栈)实现)

工具类(包含实现方法) import java.math.BigDecimal; import java.util.HashMap; import java.util.Stack; /** * className:Util * * @author:zjl * @version:0.1 * @date:2020/8/121:36 * @since:jdk1.8 */ public class Util { /** * 实现方法 * * @param s

weixin_38334306的博客 369

海康威视 2DC 系列球机手机直连实用教程

海康威视2DC系列球机手机直连教程:首先确认设备支持直连功能并下载官方"海康互联"App;通过网线连接球机与路由器,使用SADP软件调整IP至同一网段;在App中添加设备并激活,完成调试即可远程查看监控画面。常见问题包括部分型号需远程解锁、网络连接异常等,可通过检查网络环境、联系客服等方式解决。本教程提供从准备到连接的完整指引,助您轻松实现手机监控管理。

海康威视技术支持 5400

ABAP Module Pool 编程入门:把 Table Control 用透,在 Dynpro 里做出可编辑的列表界面

摘要:Table Control是SAP GUI中用于对话式事务的多行数据交互控件,具备滚动、选择、修改等功能。它通过CXTAB_CONTROL/CXTAB_COLUMN结构实现动态控制,需在PBO/PAI中配合LOOP循环处理数据流。开发时需注意LINES、TOP_LINE等关键字段设置,并采用并行循环简化编码。典型应用包括订单行维护、主数据管理等场景,支持多选删除、列排序等业务需求。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 339

C++大学教程(第七版)Chapter14.4类模板-fig14_04

我为了不另外创建一个VS项目,就在上一个博文的工程里面直接新建了一个XXX.CPP文件,然后在含有main的CPP文件中,#include,工程结构如下图。本文主要聚焦于用一个函数模板来对类模板进行测试,看起来挺麻烦的,做起来似乎又不是很麻烦,让我自己写 我又写不出来,还是看看人家作者是怎么实现的吧。运行效果和上一篇博文是一样的。头文件请参考上一篇博文。

只会写HelloWorld的专栏 351

把 SAP Fiori Launchpad Designer 的 Catalog 与 Group 传输讲透:从 CONF、CUST 到 Transport Request 的完整理解

SAP Fiori项目中,catalog和group的传输问题往往源于对FLPD层次模型的理解不足。FLPD包含configuration(系统级)和customizing(客户端级)两个层面,分别对应workbench request和customizing request传输方式。常见误区包括:混淆/UI2/FLPD_CONF和/UI2/FLPD_CUST入口、未提前创建传输请求、不了解层次覆盖机制(customizing会覆盖configuration)。当客户端修改configuration层的对象

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 99

C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_30.cpp

继续学习STL算法,本文主要讲:random_shuffle:随机洗牌,打乱位置。count:统计某个值的个数,比如说:vector中值为8的元素有几个呢?count_if:统计满足某个条件的元素的个数,比如说:vector中值大于9的元素有几个呢?min_element:得到最小的元素的位置,它返回一个迭代器,指向最小的那个元素。max_element:得到最大的元素的位置,它返回一个迭代器,指向最大的那个元素。accumulate:计算区间的元素的和,第三个参数值为总和的初始值。

只会写HelloWorld的专栏 425

uniapp中使用canvas生成海报,并下载保存到手机相册

如下图,是在H5中,canvas生成后的效果,首先说明,H5不支持返回图片的临时路径,不能用于保存,APP端生成成功后,会返回图片的临时路径用来保存到相册。本地测试,用的网络图片,没有出现跨域的问题,APP端也正常显示。 完整代码:可以将整个代码复制到你得uniapp项目中直接运行。代码中做了详细的注册,关于API的用法,这里只标注的简单的提示,具体还是参考 官方链接uniapp-canvas吧 <template> <view class="demo"> <c.

sunluyi的博客 3万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++大学教程(第七版)Chapter14.2函数模板-fig14_01

template 这样就是表示 T是个某个类型,是作为模板来使用的。用关键字typename 指出函数模板形参 ,实际上就是指任何内置类型。函数模板,打印数组。

只会写HelloWorld的专栏 338

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_29.cpp

继续学习STL算法,本文主要讲:replace:用什么元素替代另外一个元素,比如说把10替代为100。replace_if:如果满足一个条件,就做一个替换,比如说如果大于9,就替换为100。replace_copy:先做替换,然后copy到另外一个地方。replace_copy_if:满足条件,就做替换,然后copy到另外一个地方。// Fig22_29_STL_Alg_replace_replace_if.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//

只会写HelloWorld的专栏 207

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_31.cpp

继续学习STL算法,本文主要讲几种基本的搜索和排序算法: find:查找,返回一个输入迭代器,指向第一个含有搜索值的元素或序列的末端(没找到的话) find_if:查找满足一定条件的,需要一个函数作为参数。 sort:排序。 binary_search:搜索,在搜索之前,这个序列必须要先以递增的顺序排序,返回bool值,表明是否搜索到了目标。

只会写HelloWorld的专栏 242

C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_27.cpp

如果两个序列的长度不同,则equal()返回false。==运算符用于进行比较操作。还有另外一个版本的equal,使用一个二元谓词函数作为第四个参数,估计是比较复杂,本例子并没有包含这个版本的equal()。lexicographical_compare()函数会检测第一个序列中的元素是否比第二个序列中的小?如果小,就返回true,如果大或者相等,就返回false。mismatch()函数比较两个序列的值并返回一个pair对象,pair中的两个迭代器表明两个序列中不匹配的元素所在的位置。

只会写HelloWorld的专栏 188

C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_26.cpp

fill_n:把容器中一定范围内的元素设定为某一个值,参数是:开始,count,数值,就是从某个位置开始,设定n个值,n就是这个count。generate_n:使用一个生成函数为容器中一定范围内的元素创建新的值。后面的几篇博客会讲STL的算法,这玩意看起来挺玄乎,其实就是一堆函数而已,没啥。fill:把容器中一定范围内的元素设定为某一个值,参数是:开始,结束,数值。generate:使用一个生成函数为容器中一定范围内的元素创建新的值。

只会写HelloWorld的专栏 168

C++大学教程(第七版)Chapter22.5标准模板库-算法:Fig22_28.cpp

确切的说remove翻译为移动比较好,因为这个函数不会改变vector中的元素,也不会破坏“删除”的元素,而是把所有没有“删除”的元素挪到了vector的前端。这个函数返回一个迭代器,指向vector中最后一个没有删除的元素后面的位置。remove_copy_if:“删除”那些满足条件的元素,再做拷贝。remove_copy:例子中就是先去做移除10这个元素的操作,然后复制copy到c.begin()的位置。remove_if:“删除”那些满足条件的元素,需要有一个一元谓词函数。

只会写HelloWorld的专栏 195

《C++大学教程》 第12章 面对对象编程:多态性 笔记

《C++大学教程》 第12章 笔记更一下。 附部分课后题代码。 不知道要不要继续学完C++,还是转硬件。 个人水平有限,有问题欢迎各位大神批评指正!

战死为止的博客 1895

《C++大学教程》 第11章 面对对象编程:继承 笔记

《C++大学教程》 第11章 笔记更一下。 附部分课后题代码。继承这一章相对比较简单。 感谢苏神帮我解决error C2248! 个人水平有限,有问题欢迎各位大神批评指正!

战死为止的博客 1481

《C++大学教程》 第9章 类的深入剖析:抛出异常 笔记(下)

第9章已全部更完。 感谢苏舍长深夜答疑解惑,感激ing~ 个人水平有限,有问题欢迎各位大神批评指正!

战死为止的博客 1504

《C++大学教程》 第10章 运算符重载:string类 笔记(下)

《C++大学教程》 第10章 后续内容 笔记更一下。附部分课后题代码。重载这一章看的稀里糊涂。下周看继承。没有效率的一周。 个人水平有限,有问题欢迎各位大神批评指正!

战死为止的博客 613

如何快速上手S4:斯坦福分层结构电磁仿真工具的完整指南

S4(Stanford Stratified Structure Solver)是一款强大的开源电磁仿真工具,专为分层周期性结构设计。无论是光子晶体、波导还是滤波器,S4都能提供精确的电磁场分布分析,帮助工程师和研究人员优化设计方案。本文将带你快速掌握这款工具的核心功能、安装步骤和实战技巧! ## ???? 核心功能:为什么选择S4? S4的核心优势在于其对**分层周期性结构**的高效仿真能力。它...

gitblog_01047的博客 823
上一篇: C++大学教程(第七版)Chapter14.2函数模板-fig14_01
下一篇: C++大学教程(第七版)Chapter14.4类模板-fig14_04
superfreak
博客等级 码龄19年 158粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值