C++ STL 容器之deque

news2024/11/19 6:29:56

        deque与vector同属C++ STL容器,二者有些相似。deque 采用动态数组来管理元素,提供随机存取,它与vector 几乎一摸一样的接口。不同的是:deque的动态数组头尾都开放,能在头尾两端进行快速安插和散出。下面是deque与vector的详细对比:

        deque的操作函数

下面是deque的构造函数。

下面是deque的非变动性操作函数。

下面是deque的变动性操作函数:

对deque有一定了解后,就可以用它来做些事情,但是在使用时还需特别注意。下面以一个实例来做说明。下面是一个简单的图像处理的界面。

这里用deque对象来临时存储供操作反悔的图像,eque对象的声明如下:

在画圆操作的代码中,加入如下代码以,存储画圆操作前的图像。

case 3:   //draw circle
{
	//store image before draw rectangle
	if (dst[1].data)
	{
		if (matContainer.size() >= 5)
			matContainer.pop_front();
		matContainer.push_back(dst[1]);
		
		iCount = matContainer.size();
	}

	ReleaseCapture();
	iFlag = 0;
	bFlag = false;
	CBrush br(NULL_BRUSH);
	CBrush* oldBrush = pDC->SelectObject(&br);
	pDC->SetROP2(R2_NOT);
	DrawCircle(pDC, mcpoint[0], mcpoint[1]);
	pDC->SelectObject(oldBrush);

	int radii = sqrt(pow(mcpoint[1].x - mcpoint[0].x, 2) + pow(mcpoint[1].y - mcpoint[0].y, 2));
	circle(dst[1], mpoint[0], radii, Scalar(GetBValue(cCurrentColor), GetGValue(cCurrentColor), GetRValue(cCurrentColor)));
	::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
	pDC->SetROP2(R2_COPYPEN);
	mString = "“画圆”操作已完成。";
	mInformation.SetWindowTextW(mString);
	MatToCImage(dst[1], mImage);	//send Mat object data to CImage objiect
	Invalidate();
}
	break;

在“返回”按钮中加入如下测试代码,查看存储的图像是否正确。代码如下:

void CEasyImageDlg::OnBnClickedUndo()
{
	switch (iCount)
	{
	case 1:
		imshow("1", matContainer[0]);
		waitKey(0);
		break;
	case 2:
		imshow("1", matContainer[0]);
		imshow("2", matContainer[1]);
		waitKey(0);
		break;
	case 3:
		imshow("1", matContainer[0]);
		imshow("2", matContainer[1]);
		imshow("3", matContainer[2]);
		waitKey(0);
		break;
	case 4:
		imshow("1", matContainer[0]);
		imshow("2", matContainer[1]);
		imshow("3", matContainer[2]);
		imshow("4", matContainer[3]);
		waitKey(0);
		break;
	case 5:
		imshow("1", matContainer[0]);
		imshow("2", matContainer[1]);
		imshow("3", matContainer[2]);
		imshow("4", matContainer[3]);
		imshow("5", matContainer[4]);
		waitKey(0);
		break;
	}
	
	/*
	iCount--;
	if (iCount < 0)
	{
		iCount = 0;
		mString = "已返回到最后,没有更多可返回了";
		mInformation.SetWindowTextW(mString);
	}
	dst[1] = matContainer[iCount];
	MatToCImage(dst[1], mImage);	//send Mat object data to CImage object
	Invalidate();
	*/
}

试运行程序,界面如下:

点击打开,打开图像

打开图像后如下:

在图像上画5个圆,如下:

点击程序中的“返回”按钮,结果如下:

说明存储的是同一张图像。说明matContainer.push_back(dst[1]);传递的是一个地址,而不是认为应该存储的图像本身。该程序的操作图像是用数组存放的,其声明如下:

dst[0]用于存储源图像,dst[1]用于存储被编辑图像,dst[2]用于交换暂存。

修改代码上面的图像存储代码如下:

试运行,并打开图像,如下:

也画5个圆,如下:

按程序中的“返回”按钮,结果如下:

可以看出存储的图像正确。使用deque也得考虑是否是按值传递,是不是有点晕。

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

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

相关文章

android前台服务

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、使用2.1 添加权限2.2 新建…

nginx 版本升级

Nginx 的版本最开始使用的是 Nginx-1.18.0 &#xff0c; 由于服务升级&#xff0c;需要将 Nginx 的版本升级到 Nginx-1.19.7 &#xff0c;要求 Nginx 不能中断提供服务。 为了应对上述的需求&#xff0c;提供两种解决方案&#xff1a; 方案1&#xff1a; make upgrade 完成升…

(二十四)进阶算法

文章目录 &#xff08;一&#xff09;埃氏筛法1. 原理2. 代码3. 特点 &#xff08;二&#xff09;欧拉筛法1. 原理2. 代码3. 特点 &#xff08;三&#xff09;分解质因数1. 原理2. 代码 &#xff08;四&#xff09;斐波那契数列1. 递推式2. 代码(1) 方法1(2) 方法2 经过12天的“…

[240728] Wikidata 介绍 | 微软与 Lumen 合作提升人工智能算力

目录 Wikidata 介绍微软与 Lumen 合作提升人工智能算力 Wikidata 介绍 中文&#xff1a; 文言: 粤语&#xff1a; 来源&#xff1a; https://www.wikidata.org/wiki/Wikidata:Introduction/zh 微软与 Lumen 合作提升人工智能算力 为了满足人工智能工作负载不断增长的需求&am…

(2024,通用逼近定理(UAT),函数逼近,Kolmogorov–Arnold定理(KAT),任意深度/宽度的网络逼近)综述

A Survey on Universal Approximation Theorems 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 神经网络&#xff08;NN&#xff09; 3. 通用逼近定理&#xff0…

openssh服务升级到最新版本OpenSSH-9.8p1完全手册---- (只适用于centos6)

[年] 在centos6下编译openssh-9.8p1的rpm包 1、创建用于rpm编译的目录 mkdir -p /root/rpmbuild/SPEC mkdir -p /root/rpmbuild/SOURCES 2、安装rpmbuild和一些其它的基本依赖 yum install gcc gcc-c rpm-build -y 3、上传openssh-9.8p1.tar.gz 这个源码包到centos6服务器上&am…

一篇文章教你如何读懂 JMeter聚合报告参数!

在进行性能测试时&#xff0c;JMeter是一款备受推崇的开源工具。而其中的聚合报告&#xff08;Aggregate Report&#xff09;是我们分析测试结果、了解系统性能的重要依据。今天&#xff0c;我们就来深入探讨如何读懂JMeter聚合报告中的各项参数。 面对复杂的聚合报告&#xf…

MySQL创建表完全指南-从零开始学习数据库设计

MySQL创建表快速指南 在大数据时代,掌握数据库技能至关重要。无论你是刚入门的开发者,还是经验丰富的数据分析师,了解如何创建MySQL表格都是必备技能。本文将为你详细讲解MySQL创建表格的全过程,帮助你快速上手数据库设计。 1. 连接到MySQL服务器 首先,确保你已经安装了MyS…

Linux 的超级记事本(代码编辑器) —— vim

Linux 的超级记事本&#xff08;代码编辑器&#xff09; —— vim 关于 vimvim 的使用入门级使用——多模式基础使用——多模式插入模式&#xff08;Insert mode&#xff09;理解 命令模式&#xff08;command mode&#xff09;理解命令集 底行模式&#xff08;last line mode&…

Logback 快速入门

一、简介 Java 开源日志框架&#xff0c;以继承改善 log4j 为目的而生&#xff0c;是 log4j 创始人 Ceki Glc 的开源产品。 它声称有极佳的性能&#xff0c;占用空间更小&#xff0c;且提供其他日志系统缺失但很有用的特性。 其一大特色是&#xff0c;在 logback-classic 中本…

5G 基站特有的 5 个关键同步挑战

随着 5G 的推出和 O-RAN 联盟等举措&#xff0c;移动设备领域正在遭遇相当大的颠覆&#xff0c;这当然适用于基站和移动回程。 从手机到物联网设备&#xff0c;设备数量呈爆炸式增长&#xff0c;再加上移动视频流、工业物联网和汽车应用等新应用&#xff0c;给移动网络带来了容…

自学JavaScript(放假在家自学第一天)

目录 JavaScript介绍分为以下几点 1.1 JavaScript 是什么 1.2JavaScript书写位置 1.3 Javascript注释 1.4 Javascript结束符 1.5 Javascript输入输出语法 JavaScript(是什么?) 是一种运行在客户端(浏览器)的编程语言&#xff0c;实现人机交互效果。 2.作用(做什么?)网…

算法-插入排序

插入排序步骤 前面文章分享了两种排序算法&#xff1a;冒泡排序和选择排序。虽然它们的效率都是O(N2)&#xff0c;但其实选择排序比冒泡排序快一倍。现在来学第三种排序算法——插入排序。你会发现&#xff0c;顾及最坏情况以外的场景将是多么有用。 插入排序包括以下步骤。 …

从0开始搭建vue + flask 旅游景点数据分析系统(一):创建前端项目

根据前面的爬虫课程&#xff0c;我们重新开一个坑&#xff0c;就是基于爬取到的数据&#xff0c;搭建一个vueflask的前后端分离的数据分析系统 1 通过这个系列教程可以学习到什么&#xff1f; 从0开始搭建一个 vue flask 的数据分析系统&#xff1b;了解系统的整体架构&…

BSPTool工具

BSPTool工具 链接&#xff1a;https://pan.baidu.com/s/1UxMPjJtCHHkadFwnOfLqww?pwd1234 提取码&#xff1a;1234 1.使用方式 下载下来后&#xff0c;双击exe即可 2.MTK常用工具 2.1 MTK导出日志功能 2.2 导fulldump日志 2.3 .合并日志: 2.4 ADB指令集合 2.5 Fastboot指…

传统自然语言处理(NLP)与大规模语言模型(LLM)详解

自然语言处理&#xff08;NLP&#xff09;和大规模语言模型&#xff08;LLM&#xff09;是理解和生成人类语言的两种主要方法。本文将介绍传统NLP和LLM的介绍、运行步骤以及它们之间的比较&#xff0c;帮助新手了解这两个领域的基础知识。 传统自然语言处理&#xff08;NLP&…

指针!!C语言(第三篇)

目录 一. 二维数组传参的本质 二. 函数指针变量和函数指针数组 三. typedef关键字 四. 转移表 五. 回调函数以及qsort使用举例 一. 二维数组传参的本质 &#x1f35f;首先我们先回顾一下二维数组是怎样传参的&#xff1f;我们需要传入数组名以及行数和列数&#xff0c;这…

VS C++ Project(项目)的工作目录设置

如果只是简单创建一个VS CProject或者MFC Project&#xff0c;可能很多时候&#xff0c;只关心将Project放在硬盘的那个位置&#xff0c;与Project目录相关的的其他问题&#xff0c;并不引人注意&#xff0c;我们也不是十分在意。有时我们不得不进行工作目录方面的设置&#xf…

Javascript前端面试(七)

JavaScript 部分 1. JavaScript 有哪些数据类型&#xff0c;它们的区别&#xff1f; JavaScript 共有八种数据类型&#xff0c;分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是 ES6 中新增的数据类型&#xff1a; ●Sym…

卷积神经网络(一)---原理和结构

在介绍卷积神经网络之前&#xff0c;先提出三个观点&#xff0c;正是这三个观点使得卷积神经网络能够真正起作用。 1. 局部性 对于一张图片而言&#xff0c;需要检测图片中的特征来决定图片的类别&#xff0c;通常情况下这些特征都不是由整张图片决定的&#xff0c;而是由一些…