【C++STL标准库】序列容器之deuqe与、orwa_list与list

基本概念这里就不再浪费时间去解释,这里给出deuqe与、orwa_list、list的基本使用方法:

  • deque队列:
#include <iostream>
#include <deque>

template <typename T>
void print(T Begin, T End);

int main() {
	std::deque<int> Obj1(6);
	//迭代器的类型:随机访问迭代器
	std::cout << typeid(std::deque<int>::iterator::iterator_category).name() << std::endl;
	//deque(队列)的赋值操作,可以使用[]的方式来进行赋值
	for (int i = 0; i < Obj1.size(); i++) {
		Obj1[i] = i+1;
	}
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//at方法,找到队列中,该下标的值并返回,可以用于修改值,返回值类型:T
	Obj1.at(0) = 666;
	std::cout << typeid(Obj1.at(7)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//size方法,返回当前队列的实际大小
	int a = Obj1.size();
	std::cout << a << std::endl;
	std::cout << std::endl;
	std::cout << "----------------------------------------------------" << std::endl;
	//max_size方法,返回队列的最大尺寸
	int b = Obj1.max_size();
	std::cout << b << std::endl;
	std::cout << std::endl;
	std::cout << "----------------------------------------------------" << std::endl;
	//front方法和back方法:分别返回队列中,第一个元素和最后一个元素,返回值类型:T
	int c = Obj1.front();
	int d = Obj1.back();
	std::cout << typeid(Obj1.front()).name() << std::endl;
	std::cout << typeid(Obj1.back()).name() << std::endl;
	std::cout << c << "\t" << d << std::endl;
	std::cout << "----------------------------------------------------" << std::endl;
	//push_front方法,向队列首添加元素,返回值类型:void
	Obj1.push_front(111);
	std::cout << typeid(Obj1.push_front(111)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//push_back方法,向队列尾部添加元素,返回值类型:void
	Obj1.push_back(12345679);
	std::cout << typeid(Obj1.push_back(12345679)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_front方法,弹出队列首部的元素,返回值类型:void
	Obj1.pop_front();
	std::cout << typeid(Obj1.pop_front).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_back方法,弹出队列尾部的元素,返回值类型:void
	Obj1.pop_back();
	std::cout << typeid(Obj1.pop_back).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//rbegin方法:反向迭代器
	print(Obj1.rbegin(), Obj1.rend());
	std::cout << "----------------------------------------------------" << std::endl;
	//insert方法,向列表的指定位置插入元素,第一个参数:迭代器,第二个参数:想要插入的值 //第二个参数也可以是个数,代表想要插入几个,第三个参数就是想要插入的值
	Obj1.insert(Obj1.begin()+4,3, 666666666);
	std::cout << typeid(Obj1.insert(Obj1.begin() + 4, 666)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//erase方法,删除指定位置的元素,参数是迭代器,也可以范围删除元素,第一个参数是起始位置迭代器,第二个参数是结束位置迭代器
	Obj1.erase(Obj1.begin(),Obj1.end());
	std::cout << typeid(Obj1.erase(Obj1.begin())).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	return 0;
}

template<typename T>
void print(T Begin, T End)
{
	T i = Begin;
	for (; i != End; i++) {
		std::cout << *i << "\t";
	}
	std::cout << std::endl;
}

forward_list单向列表:

#include <iostream>
#include <forward_list>

template <typename T>
void print(T Begin, T End);

int main() {
	std::forward_list<int> arr(5, 000);
	//迭代器类型:前向迭代器,可读可写=, == ,!= ,++i ,i++
	std::cout << typeid(std::forward_list<int>::iterator::iterator_category).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//psuh_frint方法,前插法,向单向列表前插入元素,返回值类型:void
	for (int i = 0; i < 4; i++) {
		arr.push_front(i);
	}
	std::cout << typeid(arr.push_front(1)).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_front方法,弹出列表第一个元素,返回值类型:void
	arr.pop_front();
	std::cout << typeid(arr.pop_front()).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	return 0;
}

template<typename T>
void print(T Begin, T End)
{
	T i;
	for (i = Begin; i != End; i++) {
		std::cout << *i << "\t";
	}
	std::cout << std::endl;
}

list双向链表:

#include <iostream>
#include <list>

template <typename T>
void print(T Begin, T End);

int main() {
	std::list<int> arr(5, 666);
	//迭代器类型:struct std::bidirectional_iterator_tag(双向迭代器),可读可写=, == ,!= ,++i ,i++。--i,i--
	std::cout << typeid(std::list<int>::iterator::iterator_category).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//push_front,push_back方法:向列表同步和尾部插入元素,返回值类型:void
	arr.push_front(1);
	arr.push_back(5);
	std::cout << typeid(arr.push_front(1)).name() << "\t" << typeid(arr.push_back(5)).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//insert方法,向列表指定位置插入元素,第一个参数为迭代器,指向要插入的位置,第二个参数为想要插入的值/第二个参数也可以为要插入元素的个数,第三个参数为要想插入的值
	arr.insert(arr.begin(), 2);
	arr.insert(arr.begin(), 3, 666);
	std::cout << typeid(arr.insert(arr.begin(), 2)).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_front,pop_back方法,弹出列表首部和尾部的值,返回值类型:void
	arr.pop_front();
	arr.pop_back();
	std::cout << typeid(arr.pop_front).name() << "\t" << typeid(arr.pop_back).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//erese方法:删除指定位置的值,参数为指定位置迭代器,也可以删除范围,第一个参数为其实迭代器,第二个参数为结束迭代器
	arr.erase(arr.begin());
	arr.erase(arr.begin(), arr.end());
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//reverse方法:将列表中的元素倒置
	arr.reverse();
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	return 0;
}

template<typename T>
void print(T Begin, T End)
{
	T i;
	for (i = Begin; i != End; i++) {
		std::cout << *i << "\t";
	}
	std::cout << std::endl;
}

如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息队列- 背景知识

这里写目录标题 前言消息队列消息队列的作用常见的消息队列消息队列的核心概念BrokerServer核心概念消息队列的核心API消息队列与消费者之间的工作模式交换机的类型消息队列的持久化 总结 前言 消息队列,不知道大家是否陌生,如果说消息队列感到陌生的话, 有一个模型肯定大家都…

Nginx下载和安装教程、Nginx目录结构、Nginx具体应用

1、Nginx概述 Nginx是一款轻量级的开源Web服务器软件&#xff0c;也是一种反向代理服务器。它以其高性能和灵活性而被广泛应用于互联网领域。本文将介绍Nginx的概述、下载和安装以及目录结构。 &#xff08;1&#xff09;Nginx介绍 Nginx最初由Igor Sysoev开发&#xff0c;目…

Pycharm工具Python开发自动添加注释(详细)

方法自动添加参数注释 定义了一个函数&#xff0c;在函数下面敲入了三个双引号后&#xff0c;enter回车并没有自动出现注释&#xff0c;如图&#xff1a; 解决办法 Pycharm中依次打开File —> Settings —> Tools —> Python Integrated Tools&#xff0c;如图&…

C++笔记之对指针类型的变量进行+1操作

C笔记之对指针类型的变量进行1操作 在C中&#xff0c;对指针类型的变量进行"1"操作会根据指针的数据类型而有所不同。这涉及到指针的算术运算&#xff0c;C中的指针算术运算是根据指针所指向的数据类型的大小来进行的。 code review! 文章目录 C笔记之对指针类型的…

最受欢迎的12个Python开源框架,还没用过你就OUT了!!!

今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python&#xff0c;那么这12个开源框架&#xff0c;千万别错过&#xff0c;这些框架包括事件I/O&#xff0c;OLAP&#xff0c;Web开发&#xff0c;高性能网络通信&#xff0c;测试&#xff0…

zookeeper-3.7.1集群

1.下载&解压安装包apache-zookeeper-3.7.1-bin.tar.gz 解压到/app/ &改名zookeeper-3.7.1 [rootnode1 app]# tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /app/ [rootnode1 app]# mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1 ---- 删除docs [rootnode1…

五步快速搭建个性化外卖小程序商城

随着人们生活节奏的加快&#xff0c;外卖行业蓬勃发展。为了满足用户的需求&#xff0c;许多企业开始使用小程序商城来提供外卖服务。那么&#xff0c;如何制作一个功能完善、用户友好的外卖小程序商城呢&#xff1f;下面就来为大家详细介绍一下制作的步骤。 首先&#xff0c;我…

Docker consul容器服务更新与发现

Docker consul容器服务更新与发现 一、什么事服务注册与发现二、什么是consul三、consul部署1、consul服务器2、registrator服务器3、consul-template 一、什么事服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可…

Vue3+Vite+TypeScript常用项目模块详解

目录 1.Vue3ViteTypeScript 概述 1.1 vue3 1.1.1 Vue3 概述 1.1.2 vue3的现状与发展趋势 1.2 Vite 1.2.1 现实问题 1.2 搭建vite项目 1.3 TypeScript 1.3.1 TypeScript 定义 1.3.2 TypeScript 基本数据类型 1.3.3 TypeScript语法简单介绍 2. 项目配置简单概述 2.…

【CEEMDAN-WOA-LSTM】完备集合经验模态分解-鲸鱼优化-长短时记忆神经网络研究(Python代码实现)

目录 &#x1f4a5;1 概述 1.1 完备集合经验模态分解原理 1.2 鲸鱼优化 1.3 LSTM &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Python代码实现 &#x1f4a5;1 概述 1.1 完备集合经验模态分解原理 早期的 EMD 方法具有较强的自适应性&#xff0c;能够有…

【弹力设计篇】聊聊限流设计

为什么需要限流 对于一个后端系统来说&#xff0c;其处理能力是有限的&#xff0c;会受到业务流程&#xff0c;系统配置等的限制&#xff0c;QPS和TPS有一个上限值&#xff0c;比如一个订单系统1分钟可以处理100个请求。当1分钟超过100个请求的时候&#xff0c;我们为了保证系…

5.python设计模式【单例模式】

内容&#xff1a;保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点角色&#xff1a; 单例&#xff08;Singleton&#xff09; UML图 举个例子&#xff1a; 需求&#xff1a;一个类只能实例化一个对象&#xff0c;不能实例化多个对象 from abc import abstract…

QT【day2】

完善登录框&#xff1a; //main头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QDebug> //信息调试类&#xff0c;用于打印输出 #include<QIcon> //图标头文件 #include<QPushButton> //按钮类头文件 #include…

细说小程序底部标签---【浅入深出系列006】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择 学习语法的前提底部标签的总概鹅厂的自定义标签官方说明&#xff1a; 先来了解app.json文件tabBar 位于app.json哪里 使用流程要注意的是&#xff1a;配套资源作业&a…

fpga开发——蜂鸣器

蜂鸣器的原理 有源蜂鸣器和无源蜂鸣器 无源蜂鸣器利用电磁感应现象&#xff0c;为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声&#xff0c;接入直流电只能持续推动振膜而无法产生声音&#xff0c;只能在接通或断开时产生声音。无源蜂鸣器的工作原理与扬声…

git实战

git实战 第一章 快速入门 1.1 什么是git git是一个分布式的版本控制软件。 软件&#xff0c;类似于QQ、office、dota等安装到电脑上才能使用的工具。版本控制&#xff0c;类似于毕业论文、写文案、视频剪辑等&#xff0c;需要反复修改和保留原历史数据。分布式 - 文件夹拷贝…

linux网卡命名规则与修改方法

一.前言&#xff1a; 在早期的的操作系统中例如fedora13或者ubuntu15之前网卡命名的方式为eth0&#xff0c;eth1&#xff0c;eth2&#xff0c;属于biosdevname 命名规范。当然这是针对intel网卡的命名规则&#xff0c;对于realtek类型的网卡会命名为ens33。但是这个编号往往不一…

(七)「消息队列」之 RabbitMQ 发布者确认(使用 .NET 客户端)

发布者确认&#xff08;Publisher Confirms&#xff09; 发布者确认是一个 RabbitMQ 扩展&#xff0c;用于实现可靠的发布。当在通道上启用发布者确认时&#xff0c;客户端发布的消息将由代理异步确认&#xff0c;这意味着它们已在服务器端得到处理。 0、引言 先决条件 本教程…

uni-app个人中心

一. 介绍uni-app&#xff1a; uni-app 是基于Vue.js框架开发的一个跨平台移动应用开发框架&#xff0c;可以同时支持多个平台&#xff08;如iOS、Android、Web等&#xff09;的应用开发。采用了统一的语法和组件规范&#xff0c;可以大大简化跨平台开发的工作&#xff0c;提高…

SZ:zip/内部函数外部函数/VGG模型/nn

zip&#xff1a; -r recursion-d delete-m move (move隐藏的意思是&#xff0c;原文件会消失&#xff09;想增加文件&#xff0c;不需要加参数什么参数也没有。如果zip压缩文件不存在&#xff0c;执行以上命令将会创建一个新的zip文件并将指定的文件添加进去。如果zip压缩文件…
最新文章