首页 > 其他分享 >一个知识STL

一个知识STL

时间:2024-08-18 14:57:33浏览次数:10  
标签:std 元素 nums STL 知识 namespace 一个 using include

STL(标准模板库)是C++中使用广泛的模板库,它提供了许多常用的数据结构和算法。下面将详细介绍STL中的所有数据类型,并给出一些使用示例。

  1. 容器(Containers):

    • vector:可变大小的动态数组,类似于内置数组,但可以自动调整大小。
    #include <vector>
    using namespace std;
    
    vector<int> nums {1, 2, 3, 4, 5};
    nums.push_back(6); // 添加元素到末尾
    nums.pop_back(); // 删除末尾元素
    
    • list:双向链表,支持高效的插入和删除操作。
    #include <list>
    using namespace std;
    
    list<int> nums {1, 2, 3, 4, 5};
    nums.push_front(0); // 在链表头部插入元素
    nums.pop_front(); // 删除链表头部元素
    
    • deque:双端队列,类似于向量,但可以在头部和尾部进行插入和删除操作。
    #include <deque>
    using namespace std;
    
    deque<int> nums {1, 2, 3, 4, 5};
    nums.push_front(0); // 在头部插入元素
    nums.pop_front(); // 删除头部元素
    nums.push_back(6); // 在尾部插入元素
    nums.pop_back(); // 删除尾部元素
    
    • stack:栈,后入先出(LIFO)的数据结构。
    #include <stack>
    using namespace std;
    
    stack<int> nums;
    nums.push(1); // 入栈
    nums.push(2);
    nums.pop(); // 出栈
    
    • queue:队列,先入先出(FIFO)的数据结构。
    #include <queue>
    using namespace std;
    
    queue<int> nums;
    nums.push(1); // 入队列
    nums.push(2);
    nums.pop(); // 出队列
    
    • priority_queue:优先队列,根据元素的优先级进行排序,每次取出优先级最高的元素。
    #include <queue>
    using namespace std;
    
    priority_queue<int> nums;
    nums.push(3); // 插入元素
    nums.push(1);
    nums.push(2);
    int highest = nums.top(); // 获取优先级最高的元素
    nums.pop(); // 删除优先级最高的元素
    
    • set:有序集合,存储不重复的元素,支持插入、删除和查找操作。
    #include <set>
    using namespace std;
    
    set<int> nums {1, 2, 3, 4, 5};
    nums.insert(6); // 插入元素
    nums.erase(3); // 删除元素
    auto it = nums.find(2); // 查找元素
    
    • multiset:有序多重集合,存储可重复的元素,支持插入、删除和查找操作。
    #include <set>
    using namespace std;
    
    multiset<int> nums {1, 2, 3, 4, 5};
    nums.insert(2);
    nums.erase(3);
    auto range = nums.equal_range(2); // 查找元素的范围
    
    • map:有序键值对,存储唯一的键和对应的值,支持按键进行插入、删除和查找操作。
    #include <map>
    using namespace std;
    
    map<string, int> temperature {{"Monday", 25}, {"Tuesday", 27}, {"Wednesday", 24}};
    temperature["Thursday"] = 26; // 插入键值对
    temperature.erase("Wednesday"); // 删除键值对
    auto it = temperature.find("Tuesday"); // 查找键对应的值
    
    • multimap:有序多重键值对,存储可重复的键和对应的值,支持按键进行插入、删除和查找操作。
    #include <map>
    using namespace std;
    
    multimap<char, int> grades {{'A', 90}, {'B', 80}, {'C', 70}};
    grades.insert(make_pair('B', 75)); // 插入键值对
    grades.erase('C'); // 删除键对应的所有值
    auto range = grades.equal_range('B'); // 查找键对应的值的范围
    
    • unordered_set:无序集合,存储不重复的元素,支持插入、删除和查找操作,内部实现为哈希表。
    #include <unordered_set>
    using namespace std;
    
    unordered_set<int> nums {1, 2, 3, 4, 5};
    nums.insert(6); // 插入元素
    nums.erase(3); // 删除元素
    auto it = nums.find(2); // 查找元素
    
    • unordered_multiset:无序多重集合,存储可重复的元素,支持插入、删除和查找操作,内部实现为哈希表。
    #include <unordered_set>
    using namespace std;
    
    unordered_multiset<int> nums {1, 2, 3, 4, 5};
    nums.insert(2);
    nums.erase(3);
    auto range = nums.equal_range(2); // 查找元素的范围
    
    • unordered_map:无序键值对,存储唯一的键和对应的值,支持按键进行插入、删除和查找操作,内部实现为哈希表。
    #include <unordered_map>
    using namespace std;
    
    unordered_map<string, int> temperature {{"Monday", 25}, {"Tuesday", 27}, {"Wednesday", 24}};
    temperature["Thursday"] = 26; // 插入键值对
    temperature.erase("Wednesday"); // 删除键值对
    auto it = temperature.find("Tuesday"); // 查找键对应的值
    
    • unordered_multimap:无序多重键值对,存储可重复的键和对应的值,支持按键进行插入、删除和查找操作,内部实现为哈希表。
    #include <unordered_map>
    using namespace std;
    
    unordered_multimap<char, int> grades {{'A', 90}, {'B', 80}, {'C', 70}};
    grades.insert(make_pair('B', 75)); // 插入键值对
    grades.erase('C'); // 删除键对应的所有值
    auto range = grades.equal_range('B'); // 查找键对应的值的范围
    
  2. 迭代器(Iterators):

    • 迭代器是STL中通用的遍历和访问容器元素的手段,允许以相同的方式访问不同容器类型。
    • begin():返回指向容器中第一个元素的迭代器。
    • end():返回指向容器中最后一个元素之后位置的迭代器。
    • advance():将迭代器移动指定的距离。
    • distance():计算两个迭代器之间的距离。
    • next():返回指向当前迭代器位置之后指定距离的迭代器。
    • prev():返回指向当前迭代器位置之前指定距离的迭代器。
    #include <iostream>
    #include <vector>
    #include <iterator>
    using namespace std;
    
    int main() {
        vector<int> nums {1, 2, 3, 4, 5};
        
        // 使用迭代器遍历向量中的元素
        vector<int>::iterator it;
        for (it = nums.begin(); it != nums.end(); ++it) {
            cout << *it << " ";
        }
        
        cout << endl;
        
        // 使用反向迭代器逆序遍历向量中的元素
        vector<int>::reverse_iterator rit;
        for (rit = nums.rbegin(); rit != nums.rend(); ++rit)
    

标签:std,元素,nums,STL,知识,namespace,一个,using,include
From: https://blog.csdn.net/huhuhuhjijijiji/article/details/141299929

相关文章

  • 2-1 函数(高中知识)
    2-1函数(高中知识)函数例题1.分段函数复合分段例题2.复杂函数求f(x)三角函数反三角函数(反函数和原函数单调性不变且关于y=x对称)例1.求坐标在[-Π/2,Π/2]是反函数因为坐标是负数,所以距离为:-坐标,这个题距离变成-arcsinA图像幂函数......
  • 关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运
    关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路WrongFirst:我准备了一个正常类BG和一个有错误的类HelloWorld,来看看会发生什么。WrongSecond:不出意外的报错了,这似乎和IDEA的默认设置有关。SolveFi......
  • 每日掌握一个论文插图·小提琴图|24-08-18
    一、小提琴图的定义小提琴图是一种数据可视化工具,它结合了箱型图和核密度估计图的特点,使得我们能够更全面地了解数据的分布特征。小提琴图是一种统计图表,它通过图形化的方式展示了数据的分布密度。与传统的箱型图相比,小提琴图提供了更多的信息,因为它不仅显示了数据的中......
  • C语言 错误 C4716 “printstar”: 必须返回一个值
    错误:解决办法: 此类代码显然不需要返回值1.点击“项目”——“属性”2.点击“C/C++”中的“高级”——“禁用特定警告”中输入“4716”——点击“确定” 3.重新运行即可成功 ......
  • 一个简单的Rtmp推流客户端(QT录音,OpenCV摄像,FFmpeg编码推流)
            RTMP(Real-TimeMessagingProtocol)是一种实时流媒体传输协议,常用于音视频直播。        RTMP推流客户端是一种能够将音视频数据推送到直播服务器的工具。QT录音是利用Qt库实现的录音功能。OpenCV摄像是利用OpenCV库实现的对摄像头的控制和图像处理功......
  • 开发一个属性名提示友好的Vue组件
    这两天开发了一个组件,开发好之后想着先本地npmlink用一用试试,然后在vue3项目中link了过来,发现VSCODE没有属性提示,鉴于考虑到一个好的组件应该是提示友好的,于是给组件准备加上属性提示。首先,我的组件包名叫"xxx-xx"这种,然后我是提供了全局安装和仅导入组件的方式importEras......
  • 知识改变命运 数据结构【链表面试题】
    1.删除链表中等于给定值val的所有节点。OJ链接publicListNoderemoveElements(ListNodehead,intval){if(head==null){returnnull;}ListNodecur=head.next;ListNodepre=head;while(cur!=null){......
  • cpp零碎知识点小记
    字符串读取方法记录记录个人小结:按整行读到string,推荐用方法2getline(cin,string)按整行读到char[],推荐用方法4cin.getline(cin,char*)读单个字符串,推荐用cin>>啰嗦解释如下:按行读方法2getline(cin,string)和方法4cin.getline(cin,char)会读到回车为止,......
  • Linux基础知识学习(一)
    一.简介Linux内核最初只是由芬兰人林纳斯·托瓦兹(LinusTorvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(可移植操作系统接口)和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运......
  • C++做算法题,容器知识看这一篇就够啦!
    C++常用容器分享(算法题,掌握这些就够了)vector是什么连续的顺序存储结构,其实就是一个可变数组想使用的话记得#include<vector>怎么用初始化语法vector<类型>名字(长度,初始值)演示一下//一维的vectorvector<int>arr;//不指定里面有多少个元素vector<int>a......