STL常用数据结构总结

C++ STL常用数据结构 C++ STL常用数据结构 阅读详情
 数据结构机考的你,想不想偷懒?快来看一看c++的STL吧。
  STL(standard template library)标准模板库提供了一些列数据结构和算法,帮你更高效地解决问题。下面列出一些常用的(STL的一小部分)数据结构和算法接口,标准采用sgi stl,参考自The annotated STL Sources
  (所有容器采用泛型设计,可采用泛型方式调用,头文件为容器名)
  一、vector 向量容器
    vector与array相比,其差异在于vector动态分配空间(线性连续地址),并且集成了一系列操作函数。
    public接口:(构造函数与析构函数不列出且有省略)
        iterator begin(); //返回首元素
        inerator end(); //返回末尾元素的下一个位置指针,注意不是最后一个元素
        size_type size() const; //返回vector长度
        size_type capacity() const; //返回容器容量
        bool empty() const; //返回向量是否为空
        reference operator[]; //可用[]符号进行同数组一样的下标访问
        void push_back(const T& x); //将x元素添加到最后
        void pop_back(); //将最后一个元素取出
        iterator erase(iterator position); //删除position位置的元素,并返回操作后position位置的元素
        void resize(size_type new_size); //改变向量长度
        void clear();  //清空向量
    遍历: 迭代器方法、直接线性遍历方法
  二、 stack 栈
    stack没有迭代器,不可遍历。
    stack底层采用list实现。
    public接口:
(构造函数与析构函数不列出且有省略)
        bool empty() const;
        size_type size() cosnt;
        reference top();  //返回栈顶元素
        void push(const value_type& x); //元素入栈
        void pop(); //栈顶元素弹栈
  三、queue 队列
    queue没有迭代器,不可遍历。
    queue底层采用list实现。
    public接口:
(构造函数与析构函数不列出且有省略)
        bool empty() const;
        size_type size() const;
        reference front(); //返回队首元素
        reference back(); //返回队尾元素
        void push(const value_type& x); //元素入队
        void pop(); //元素出队
  四、 set 集合
    set中所有元素会根据键值自动排序,set中不允许有相同键值元素。set是非线性排列的,其底层采用红黑树,采用平衡二叉搜索机制,set的迭代器是const类型,不能写入修改值。(默认升序)set的遍历采用迭代器,迭代器重载过操作符对平衡树进行中序遍历。
     
public接口:(构造函数与析构函数不列出且有省略)
        iterator begin() const; 
        iterator end() const;
        bool empty() const;
        size_type size() const;
        void swap(set<Key, Compare, Alloc>& x); //交换两个集合中元素
        pair<iterator, bool> insert(cosnt value_type& x); //插入x元素
        void insert(InputIterator first, InputIterator last); //插入first到last区间(前闭后开)内的所有元素
        void erase(iterator position); //删除position位置迭代器的元素
        size_type erase(const key_type& x); //删除key为x的元素
        void erase(iterator first, iterator last); //删除集合中等于first到last区间内的所有元素
        void clear();
        iterator find(const key_type& x); //查找key等于x的元素,查找成功返回x的迭代指针,失败返回end()
    在algorithm里提供了一些列对set操作的算法:
        OutputIterator set_union(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2, OutputIterator result);
        //函数求两个集合的并集并返回结果
        OutputIterator set_intersection(
InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2, OutputIterator result);
        //函数求两个集合的交集并返回结果
         
OutputIterator set_difference(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2, OutputIterator result);
        //函数求两个集合的差集,出现在[first1, last1)但不出现在[first2, last2)的元素
  五、map 键值对容器
    所有元素会根据键值排序
(默认升序),map中的所有元素都是pair,同时拥有实值和键值,pair的第一元素为键值,第二元素为实值。map不允许有两个相同键值的元素。map底层实现依靠红黑树机制。map的迭代器不能修改键值,但可以修改实值,遍历采用迭代器方式,自动对平衡树进行中序遍历。
    public接口:
(构造函数与析构函数不列出且有省略)
        iterator begin();
        iterator end();
        iterator rbegin();
        bool empty() const;
        size_type size() const;
        T& operator[] (const key_type& k); //根据key值,通过下边方式取得实值
        pair<iterator, bool> insert(const value_type& x);
        iterator insert(iterator position, const value_type& x); 
        void insert(InputIterator first, InputIterator last);
        void erase(iterator position);
        size_type erase(const key_type& x);

       
 void erase(iterator first, iterator last); //删除集合中等于first到last区间内的所有元素
       
 iterator find(const key_type& x); //查找key等于x的元素,查找成功返回x的迭代指针,失败返回end()
    键值对的构造,可以采用make_pair的方式,也可以采用map::value_type(k, T())的类型转换。 
STL常用数据结构和算法简介 随机访问迭代器(Random Access Iterator):支持++、--、==、!=、*、[]、+、-、>、>=、<、<=等操作,可用于遍历动态数组。- 双向迭代器(Bidirectional Iterator):支持++、--、==、!- set/multiset:红黑树,支持快速查找和有序遍历,不允许重复元素,multiset可以有重复元素。STL提供了多种常用算法,如排序、查找、遍历、比较、复制、移动等等。- 输出迭代器(Output Iterator):支持++、*、=等操作。 阅读详情

相关推荐

c++中STL常用数据结构

一.stack(栈) 常见的操作: #include using namespace std; int main() { stack S; S.push(3); S.push(10); S.push(100); cout<<S.size()<<endl; S.pop(); cout<<S.top()<<endl;; if(!

bbtl_ast的博客 9285

C++STL常用数据结构

众所周知,栈、队列、优先级队列都是比较常用数据结构,但是手写又太麻烦,怎么办?用STL标准库呗!

起床气233的博客 1270

C++ 常用到的数据结构的使用 STL

1 string 头文件: #include <string> 使用 #include <iostream> #include <string> using namespace std; int main() { string a = "abcdf"; int k = a.find('r'); //寻找r在字符串中第一次出现的位置,从0开始,不存在返回-1; cout << k << endl; a.substr(1,3); .

757

STL常用数据结构

STL常用数据结构: [1]  stl中stack、queue默认的底层实现为deque结构。 [2]  deque:用map管理多个size大小的连续内存块,方便头尾插入。 [3]  vector:变长动态数组,每次增大1.5倍,删除元素时不释放空间。 [4]  priority_queue底层默认采用vector向量O(nlogn)。 [5]  list:双向链表容器。 [6]

杰哥的专栏 2933

总结——STL 常用数据结构及用法

STL常用数据结构及用法 C++中的STL(Standard Template Library),即标准模板库,中包含了很多编程时常用数据结构,省去了自己临时写的麻烦,这里就来总结一下。如果有错误或写的不好的地方还请多指正。 首先稍微介绍下iterator(迭代器),iterator不是数据结构,所有容器都提供获得迭代器的元素,声明时,其数据类型必须与容器的数据类型一致。其作用主要是用来遍历

并非所有流浪者都迷失了自我 8686

STL库中常用数据结构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录STL库中常用数据结构一、stack 栈二、queue 队列三、deque 双端队列四、set集合和map哈希表1、插入遍历2、map中查找和被查找的个数五、vector 动态数组 STL库中常用数据结构 提示:如stack栈 ,queue队列,deque双端队列, set集合,map哈希表等等 提示:以下是本篇文章正文内容,下面案例可供参考 一、stack 栈 栈的基本操作: 1.s.empty() 如果栈为空返回true

Fzefeng的博客 700

STL数据结构总结

文章目录【1】vector【2】list【3】deque【4】stack【5】queue【6】heap【7】priority_queue【8】slist【9】关联式容器【10】rb_tree 红黑树【11】set【12】map【13】multiset【14】mutimap【15】hashtable【16】hashset【17】hash_map【18】hash_multiset【19】hash_mu...

duanbin的博客 1439

STL 常用容器的底层数据结构

STL 常用容器的底层数据结构实现 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问 deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下: [堆1] --> [堆2] -->[堆3] --> … 每个堆

lihaihui1991的博客 1265

STL 常用数据结构底层实现原理详解

容器随机访问插入/删除(头)插入/删除(尾)插入/删除(中)查找内存vectorO(1)O(n)O(1)*O(n)O(n)连续listO(n)O(1)O(1)O(1)O(n)分散dequeO(1)O(1)O(1)O(n)O(n)分段连续map/setO(log n)O(log n)O(log n)O(log n)分散O(log n)O(1)顶部连续*注:vector尾部插入是摊销O(1)正确选择容器:根据使用场景选择最合适的容器性能优化。

苦哈哈的 C++ 程序员,写这个技术博客不是为了装逼,也不是为了立人设,是为了收割流量 1385

掌握STL:C++标准模板库的常用数据结构

本文将介绍C++标准模板库(STL)中最常用数据结构——向量(Vector)和映射(Map)。通过理解向量的动态数组特性和映射的键值对存储机制,可以显著提高编程效率和数据处理能力。文章还详细解释了迭代器的使用方法,为深入学习STL打下基础。

weixin_28913879的博客 383

C++STL常用数据结构用法整理

vector创建对象,vector&lt;int&gt; vec;尾部插入数字,vec.push_back(a);使用下表访问元素使用迭代器访问元素插入元素删除最后一个元素,vec.pop_back()queue定义一个queue的变量 queue&lt;Type&gt; M查看是否为空范例  M.empty()从已有元素后面增加元素 M.push()输出现有元素的个数 M.size()显示第一个...

weixin_30104533的博客 4007

STL 常用数据结构总结

常用数据结构 对于面试的人来说, 基本上会用到的就下面几种数据结构, 如果可以使用STL的话就使用下面几种: stack, priority_queue, queue, vector, list, set, map, unordered_map stack(栈) 主要操作: push, top, pop #include &lt;stack&gt; using namespace std; in...

Wesley's Blog 1132

STL 常用数据结构

Sort 和容器 --------------------------------------------------------------------------------STL中标准容器主要vector, list, deque, string, set, multiset, map, multimay, 其中set, multiset, map, multimap都是以树结构的方式存

coovig的专栏 5797

STL常用数据结构

1- Sequence Containers:维持顺序的容器。 2- 类型 名称 随机读取 排序数组 插入任意值 获得最大值 删除最大值 备注 vector 动态数组 O(1) 因为在尾部增删的复杂度是 O(1),我们也可以把它当作 stack 来用 list 双向链表 可以当作 stack 和 queue 来使用,链表不支持快速随机读取,因此我们很少用到这个数据结构。一个例外是经典的 LRU 问题,我们需要利用链表的特性来解决 deque 双端队列 O(1) 又支

南北粉面馆 1064

[数据结构] [C++ STL] 常用算法总结

STL算法部分主要由头文件 <algorithm>,<numeric>,<functional> 组成。要使用 STL中的算法函数必须包含头文件 <algorithm>,对于数值算法须包含 <numeric>,<functional> 中则定义了一些模板类,用来声明函数对象。非可变序列算法:指不直接修改其所操作的容器内容的算法。可变序列算法:指可以修改它们所操作的容器内容的算法。排序算法:包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。数值算法:对容器内容进行数值计算。

m0_73482095的博客 895

C++STL常用数据结构1详解---栈(stack)

STL标准数据结构详解---1

起床气233的博客 614
上一篇: B. The Queue codeforces398div2
下一篇: 图论基础
Qer_
博客等级 码龄11年 34粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值