c++学习:容器stack栈+queue+map(简易输入法)+deque

目录

stack

模板原型

头文件

模板的成员类型和成员对象和成员函数

栈类模板的容器对象

实例

queue

模板原型

头文件

模板的成员类型和成员对象和成员函数

队列类模板的容器对象

实例

map

模板原型

头文件

模板的成员类型和成员对象和成员函数

关联类模板的容器对象

实例1

实例2

deque

模板原型

头文件

模板的成员类型和成员对象和成员函数

双端队列类模板的容器对象

实例1


stack

std::stack 类是一种容器适配器,是栈——先进后出数据结构

模板原型

template<
    class T,
    class Container = std::deque<T>
> class stack;

头文件

#include <stack>

模板的成员类型和成员对象和成员函数

std::stack - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/container/stack

栈类模板的容器对象

//实例化一个 栈类模板的容器对象
std::stack<std::string> stack;

实例

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    //栈这种数据结构----先进后出
    //实例化一个 栈类模板的容器对象  栈的成员类型是string
    std::stack<std::string> stack;

    //入栈 --向栈顶插入元素
    stack.push("zhang3");
    stack.push("li4");
    stack.push("wang5");
    stack.push("lao6");

    //出栈
    while(1)
    {
        //出栈的数据如何获取数据
        cout<<stack.top()<<endl;
        //删除--删除栈顶
        stack.pop();
        //判断栈是否为空
        if(stack.empty() == true)
            break;
    }

    return 0;
}

queue

std::queue 类是一种容器适配器,是队列——先进先出数据结构

模板原型

template<
    class T,
    class Container = std::deque<T>
> class queue;

头文件

#include <queue>

模板的成员类型和成员对象和成员函数

std::queue - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/container/queue

队列类模板的容器对象

    //实例化 队列类模板的对象
    std::queue<std::string> queue;

实例

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    //实例化 队列类模板的对象
    std::queue<std::string> queue;

    //入队--尾插  ---两端操作
    queue.push("zhang3");
    queue.push("li4");
    queue.push("wang5");
    queue.push("lao6");

    //判断队列是否为空
    while(!queue.empty())
    {
        //出队之前,先获取数据--头部数据
        cout<<queue.front()<<endl;
        //出队,头部数据删除
        queue.pop();
    }

    return 0;
}

map

std::map 是一种有序关联容器,它包含具有唯一键的键值对。键之间以比较函数 Compare 排序。搜索、移除和插入操作拥有对数复杂度。map 通常实现为红黑树。

模板原型

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T>>
> class map;

头文件

#include <map>

模板的成员类型和成员对象和成员函数

std::map - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/container/map

关联类模板的容器对象

    //实例化一个关联容器类模板的对象
    //数据格式:  键值对的方式存在   key-value
    std::map<long int,std::string> map;

    //实例化一个键值对类模板的对象
    std::pair<long int,std::string> data(200,"lao6");

实例1

#include <iostream>
#include <map>

using namespace std;

int main()
{
    //实例化一个关联容器类模板的对象
    //数据格式:  键值对的方式存在   key(int)-value(string)
    std::map<long int,std::string> map;

    //插入数据  operator[]  访问或插入指定的元素
    map[100] = "zhang3";
    map[120] = "li4";
    map[122] = "wang5";

    //实例化一个键值对类模板的对象
    std::pair<long int,std::string> data(200,"lao6");
    //insert插入数据
    map.insert(data);

    //访问
    cout<<map[120]<<endl;

    //通过迭代器遍历整个容器
    std::map<long int,std::string>::iterator it;
    for(it=map.begin(); it!=map.end(); it++)
    {
        //it->first 得到键   second 得到值
        cout<<it->first<<"\t"<<it->second<<endl;
    }

    return 0;
}

实例2  简易输入法

#include <iostream>
#include <map>
using namespace std;

int main()
{
    //实现一个简单的拼音中文输入法
    std::map<string,string> map;

    //插入数据
    map["a"] = "啊阿錒吖嗄";
    map["b"] = "吧把不被表";
    map["c"] = "从成层出插";
    map["ni"] = "你尼呢腻拟";

    while(1)
    {
        string input;
        cin>>input;//输入key

        string value = map[input];//获取对应key的value

        //汉字字符串--->utf-8占3个字节   //遍历value 
        for(int i=0; i<value.size()/3; i++)//汉字的个数
        {
            cout<<i+1<<" "<<value.substr(3*i,3)<<"\t";
        }cout<<endl;

        //根据输入数字显示对应的汉字
        int num=0;
        cin>>num;
        cout<<value.substr(3*(num-1),3)<<endl;
    }

    return 0;
}

deque

std::deque(double-ended queue,双端队列)是有索引的序列容器,它允许在它的首尾两端快速插入及删除。另外,在 deque 任一端的插入或删除不会使指向其余元素的指针或引用失效。等于队列和栈的结合体

模板原型

template<
    class T,
    class Allocator = std::allocator<T>
> class deque;

头文件

#include <deque>

模板的成员类型和成员对象和成员函数

std::deque - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/container/deque

双端队列类模板的容器对象

std::deque<int> deque;

实例1

#include <iostream>
#include <deque>

using namespace std;

int main()
{
    std::deque<int> deque;

    //实现队列功能
    deque.push_back(10);
    deque.push_back(20);
    deque.push_back(30);
    deque.push_back(40);

    //遍历
    for(int i = 0; i<deque.size();i++)
    {
        cout<<deque[i]<<endl;
    }
    //也可以使用迭代器遍历
    for(std::deque<int>::iterator it = deque.begin();it!=deque.end();it++)
    {
        cout<<*it<<endl;
    } 

    //出队 头删
    //判断是否为空
    while(!deque.empty())
    {
        //先访问头部数据
        cout<<deque.front()<endl;
        deque.pop_front();//
    }

    return 0;
}

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

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

相关文章

debian cups 打印机共享

apt update apt install -y cups localhost:631 add printer root 密码 添加打印机 然后在windows上设置 http://ip:631/printers/HP_LaserJet_1022

Vue3---安装路由

介绍 在Vue3项目中安装路由 示例 第一步&#xff1a;执行npm命令安装路由 npm install vue-router4第二步&#xff1a;在项目的src文件夹下创建router子文件夹 第三步&#xff1a;创建index.js和routes.js文件&#xff0c;以下为文件的代码 //通过vue-router插件实现模板…

Elementui Radio单选框取消选中

问题&#xff1a; 最近开发一个后台项目的时候用到了单选框&#xff0c;而客户的要求是默认选择一个选项&#xff0c;然后点击可以取消选中。不想自己在手写一个Radio组件&#xff0c;只能在elementui的单选框上修改一下下啦。 1. .native的作用 .native的作用是在给组件添加修…

Typecho 最新XC主题 去除域名授权全解密源码

Typecho 最新XC主题 去除域名授权全解密源码 这是一款多样式主题&#xff0c;首页支持六种主题样式&#xff0c;支持Pjax优化访问速度&#xff0c;多种单页&#xff0c;如友链、说说等。评论支持表情&#xff0c;自定义编辑器&#xff0c;支持其他样式功能。该主题功能性挺高&…

代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合

216.组合总和III 题目&#xff1a; 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 思路&…

3D Surface Subdivision Methods 3D 曲面细分方法

文章目录 1 介绍2 细分法3 一个简单的例子&#xff1a;Catmull-Clark 细分4 Catmull-Clark 细化5 Refinement Host6 Geometry Policy7 四种细分方法8 示例&#xff1a;自定义细分方法9 实施历史 原文地址: https://doc.cgal.org/latest/Subdivision_method_3/index.html#Chapte…

美创科技葛宏彬:夯实安全基础,对医疗数据风险“逐个击破”

导读 解决医疗机构“临床业务数据合规流动”与“重要数据安全防护”两大难题。 2023年11月11日&#xff0c;在2023年南湖HIT论坛上&#xff0c;HIT专家网联合杭州美创科技股份有限公司&#xff08;以下简称美创科技&#xff09;发布《医疗数据安全风险分析及防范实践》白皮书…

小程序学习基础(页面加载)

打开首页&#xff0c;然后点击第一个按钮进去心得页面 进入心得页面以后 第一个模块是轮播图用的是swiper组件&#xff0c;然后就是四个按钮绑定点击事件&#xff0c;最后就是下拉刷新&#xff0c;下拉滚动&#xff0c;上拉加载。代码顺序wxml,js,wcss,json。 <!--pages/o…

Python——python编译器安装教程

1.前往python官网下载安装程序 python官网 python编译器安装程序下载网站 2.找到自己需要的版本&#xff0c;下载对应的安装程序&#xff0c;运行程序 打开安装包&#xff0c;切记要勾选add python 3.9 to PATH 可选择自动安装&#xff08;Install Now&#xff09;或点击自定义…

Intellij-idea 如何编译maven工程

在IntelliJ IDEA中编译Maven工程的过程如下所示&#xff1a; 打开IntelliJ IDEA并导入Maven工程。选择"File"&#xff08;文件&#xff09;菜单&#xff0c;然后选择"Open"&#xff08;打开&#xff09;或者"Open Project"&#xff08;打开项目…

JVM工作原理与实战(十):类加载器-Java类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、介绍 二、扩展类加载器 三、通过扩展类加载器去加载用户jar包 1.放入/jre/lib/ext下进行扩展 2.使用参数进行扩展 四、应用程序类加载器 总结 前言 ​JVM作为Java程序的运行…

WPF常用控件-Window

常用属性 这里重点记录一些关键且容易忘记的属性&#xff0c;那些很常用的如Title啥的就不在这里一一说明了。 任务栏按钮 ShowInTaskbar&#xff1a;是否在任务栏中显示应用按钮&#xff0c;默认为True。 层级 Topmost&#xff1a;应用是否始终在所有应用的最上层&#x…

MongoDB分片集群架构详解

分片简介 分片&#xff08;shard&#xff09;是指在将数据进行水平切分之后&#xff0c;将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于&#xff0c;MongoDB 本身就自带了分片管理的能力&#xff0c;对于开发…

Tensorflow2.0笔记 - 基本数据类型,数据类型转换

【TensorFlow2.0】(1) tensor数据类型&#xff0c;类型转换_tensorflow tensor转int-CSDN博客文章浏览阅读1.5w次&#xff0c;点赞8次&#xff0c;收藏28次。各位同学好&#xff0c;今天和大家分享一下TensorFlow2.0中的tensor数据类型&#xff0c;以及各种类型之间的相互转换方…

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

前言 英特尔公司发行的模型部署工具OpenVINO™模型部署套件&#xff0c;可以实现在不同系统环境下运行&#xff0c;且发布的OpenVINO™ 2023最新版目前已经支持MacOS系统并同时支持在苹果M系列芯片上部署模型。在该项目中&#xff0c;我们将向大家展示如何在MacOS系统、M2芯片的…

③使用Redis缓存,并增强数据一致性。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 使用Redis缓存&#xff0c;并增强数据一致性。…

1. 认识SPSS

使用的是IBM SPSS statistics 25&#xff0c;参考教材《统计分析与SPSS的应用》 一、安装和启动 具体安装过程是参考spss下载以及安装详细教程这篇文章&#xff0c;下载安装包然后按他的步骤获取用户许可证即可。 二、主要窗口 数据编辑器窗口data editor 是SPSS的主程序窗…

UV映射技巧和窍门

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 有一个鲜为人知的主题是纹理映射。这始终是 3D 建模师想要处理的最后…

.NET 6中如何使用Redis

1、安装redis Redis在windows平台上不受官方支持&#xff0c;所以想要在window安装Redis就必须去下载windows提供的安装包。安装地址&#xff1a;https://github.com/tporadowski/redis/releases 2、在NueGet安装包 3、在appsettings.json文件里面添加Redis相关配置信息 &quo…

第11章 GUI Page480~486 步骤二十七 “脏数据”与“新文档”状态维护

wxMyPainterFrame类定义中声明新的成员&#xff1a; 增加一个全局变量&#xff0c;初始化新成员&#xff1a; 先实现TrySaveFile() SaveFile()暂时为空实现 增加两个新的私有成员方法&#xff1a; wxMyPainterFrame类中&#xff0c;修改了“_items”的几个地方 ① 鼠标抬起时…