IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map -> 正文阅读

[C++知识库]【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map

@Author:Runsen

STL 中的栈容器是一种容器适配器。在栈容器中,元素在一端插入并在同一端删除。

stack

为了实现堆栈容器,我们需要在我们的程序中包含头文件<stack>

#include<stack>

stack容器的一般声明语法是:

stack<objectType> stackNam

下面介绍下STL 中stack容器支持的各种操作。

  • push 操作用于在堆栈中插入一个元素。此操作始终在堆栈顶部添加元素。
  • pop 操作用于从堆栈中删除元素。移除的元素是栈顶指向的元素。
  • top : 返回栈顶元素。
  • empty : 检查堆栈是否为空。
  • size:返回栈的大小,即栈中元素的数量。
#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> stack;
    stack.push(21);
    stack.push(22);
    stack.push(24);
    stack.push(25);
     
    stack.pop();
    stack.pop();
 
    while (!stack.empty()) {
        cout << ' ' << stack.top();
        stack.pop();
    }
}

queue

元素添加到队列的后面,而从队列的前面删除。一般来说,队列采用先进先出(FIFO)的排列方式。

要在程序中实现队列容器,我们必须在代码中包含一个头文件 <queue>

队列支持的各种操作。

  • empty() – 返回队列是否为空。
  • size() – 返回队列的大小。
  • swap():交换两个队列的内容,但队列的类型必须相同,尽管大小可能不同。
  • emplace():在队列容器中插入一个新元素,新元素被添加到队列的末尾。
  • queue::front() 和 queue::back() – front()函数返回对队列第一个元素的引用。back()函数返回对队列最后一个元素的引用。
  • push(g) 和 pop() – push()函数在队列末尾添加元素“g”。pop()函数删除队列的第一个元素。
#include <iostream>
#include <queue>

using namespace std;

// Print the queue
void showq(queue<int> gq)
{
    queue<int> g = gq;
    while (!g.empty()) {
        cout << '\t' << g.front();
        g.pop();
    }
    cout << '\n';
}

// Driver Code
int main()
{
    queue<int> gquiz;
    gquiz.push(10);
    gquiz.push(20);
    gquiz.push(30);

    cout << "The queue gquiz is : ";
    showq(gquiz);

    cout << "\ngquiz.size() : " << gquiz.size();
    cout << "\ngquiz.front() : " << gquiz.front();
    cout << "\ngquiz.back() : " << gquiz.back();

    cout << "\ngquiz.pop() : ";
    gquiz.pop();
    showq(gquiz);
    return 0;
}

map

map是具有键值对的关联容器,因此键值始终是唯一的。map中的键可以插入或删除,但不能更改。另一方面,可以更改与键关联的值。

  • at 和 [ ]:运算符 at和 [ ] 用于访问map元素。at 和 [] 具有相同的功能,但只有一个区别。如果映射中不存在访问的键,则“at ”运算符会引发异常。而 [ ] 运算符会在映射中不存在访问的键时在map中插入新键。
  • begin : 返回map中第一个元素的迭代器。
  • end:返回指向map中最后一个元素之后的元素的迭代器。
#include <iostream>
#include <map>
using namespace std;
int main()
{
    map<int, int> mymap{ {1,10},{2,20},{3,30} };
    map<int, int> ::iterator it;
    cout << "\nThe map mymap is : \n";
    cout << "\tKEY\tVALUE\n";
    for (it = mymap.begin(); it != mymap.end(); ++it) {
        cout << '\t' << it->first
            << '\t' << it->second << '\n';
    }
    cout << endl;
    mymap.at(2) = 10; 
    mymap[3] = 10; 
    cout << "\nThe map mymap is : \n";
    cout << "\tKEY\tVALUE\n";
    for (it = mymap.begin(); it != mymap.end(); ++it) {
        cout << '\t' << it->first
            << '\t' << it->second << '\n';
    }
    cout << endl;
}

输出如下

The map mymap is :
        KEY     VALUE
        1       10
        2       20
        3       30


The map mymap is :
        KEY     VALUE
        1       10
        2       10
        3       10

unordered_map

unordered_map 是一个关联容器,用于存储由键值和映射值组合形成的元素。map的API 对于unordered_map 的操作基本相同。

#include <iostream>
#include <unordered_map>
using namespace std;
 
int main()
{
    unordered_map<string, int> umap;
 
    umap["1"] = 10;
    umap["2"] = 20;
    umap["3"] = 30;
 
    for (auto x : umap)
      cout << x.first << " " << x.second << endl;
 
}

map和unordered_map的对比:

map 操作的平均时间复杂度为 O(log n) 而对于 unordered_map,平均时间复杂度为 O(1)。

对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map,但是空间占用上unorder_map要高于map,因为unorder_map占用的内存更加高一点,unorder_map内部采用hash表,map内部采用的是红黑树,内存占有率的问题转化成hash表 VS 红黑树,还是unorder_map内存要高一点

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:22:34  更:2021-08-24 15:23:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 6:56:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计