STL 常见容器】的更多相关文章

vector: 是一种在结尾处高效插入.删除的容器,本质上是一个动态数组,可以自动维护数组的空间分配.它也允许在开头和中间插入.删除数据,但是效率极低. <span style="font-size:10px;">#include <iostream> #include <vector> #include <string> using namespace std; void main(){ vector<string> str…
C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除:O(logN) hash_map, hash_set, hash_multimap, and hash_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入:O(1),最坏情况O(N). 查看:O(1),最坏情况O(N). 删除:O(1…
STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector,list, deque, set, map等),算法完成特定任务,迭代器用来遍历容器对象,扮演容器和算法之间的胶合剂. 模板类vector 在计算中,矢量(vector)对应数组,它的数据安排以及操作方式,与array非常类似.在C++中,使用vector模板类时,需要头文件包含#include<v…
C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串.可以被看作是一个\(bool\)数组.它比\(bool\)数组更优秀的优点是:节约空间,节约时间,支持基本的位运算.在\(bitset\)容器中,\(8\)位占一个字节,相比于\(bool\)数组\(4\)位一个字节的空间利用率要高很多.同时,\(n\)位的\(bitset\)在执行一次位运算的复…
详解C++ STL set 容器 本篇随笔简单介绍一下\(C++STL\)中\(set\)容器的使用方法及常见使用技巧. set容器的概念和性质 \(set\)在英文中的意义是:集合.\(set\)容器也的确"人如其名",实现了这个集合的功用. 高中数学必修一集合那章(高一以下的小伙伴不用慌,不讲数学只讲概念),关于集合的性质,给出了三个概念:无序性.互异性.确定性. 那么,\(set\)容器的功用就是维护一个集合,其中的元素满足互异性. 我们可以将其理解为一个数组.这个数组的元素是两…
浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器.我们在学习这个容器的时候,不仅要学到这个容器具体的使用方法,更要从中体会\(C++STL\)的概念. vector容器的概念 \(vector\)在英文中是矢量的意思.如果学过高中数学必修四的平面向量或者高中物理必修一的第一节课对其会有一个直观的认识.但是在\(STL\)中,\(vector\)和…
浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们在学习这个容器的时候,不仅要学到这个容器具体的使用方法,更要从中体会\(C++STL\)的概念. queue容器的概念 \(queue\)在英文中是队列的意思.队列是一种基本的数据结构.而\(C++STL\)中的队列就是把这种数据结构模板化了.我们可以在脑中想象买票时人们站的排队队列.我们发现,在一…
浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种基本的数据结构.而\(C++STL\)中的栈就是把这种数据结构模板化了. 栈的示意图如下:这是一个先进后出的数据结构.这非常重要!! 事实上,\(stack\)容器并不是一种标准的数据结构,它其实是一个容器适配器,里面还可以存其他的\(STL\)容器.但那种使用方法过于高深而且不是很常用,所以在此不…
详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器的概念 \(priority_queue\)在英文中是优先队列的意思. 队列是一种基本的数据结构.其实现的基本示意图如下所示: 而\(C++STL\)中的优先队列就是在这个队列的基础上,把其中的元素加以排序.其内部实现是一个二叉堆.所以优先队列其实就是把堆模板化,将所有入队的元素排成具有单调性的一队…
浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们常用而且必须需要掌握的数据结构.\(C++STL\)中的确有模拟队列的模板:#include<queue>中的\(queue\)和\(priority\_queue\).队列的性质是先进先出,即从队尾入队,从队首出队.而\(deque\)的特点则是双端进出,即处于双端队列中的元素既可以从队首进/出…
详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的意义是:集合.而\(multi-\)前缀则表示:多重的.所以\(multiset\)容器就叫做:有序多重集合. \(multiset\)的很多性质和使用方式和\(set\)容器差不了多少.而\(multiset\)容器在概念上与\(set\)容器不同的地方就是:\(set\)的元素互不相同,而\(m…
转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始. 先看看他们的分类吧 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一个重型字符串. 非标准关联容器hash_set.h…
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL内部定义的第二种STL容器适配器queue(队列). 对于接触过数据结构的人来说,队列并不陌生,它是一种FIFO(first in first out)的数据结构.与栈相比,队列的不同之处在于:(1)队列是一种先进先出的数据结构,而栈则是一种后进先出的数据结构:(2)队列支持首尾两端的訪问操作,而栈…
1) STL的容器通过类模板技术,实现数据类型和容器模型的分离. 2) STL的迭代器技术实现了遍历容器的统一方法:也为STL的算法提供了统一性. 3) STL的函数对象实现了自定义数据类型的算法运算 核心思想:其实函数对象本质就是回调函数,回调函数的思想,就是任务的编写者和任务的调用者有效解耦合,函数指针做函数参数. 4) 具体例子:transform算法的输入,通过迭代器first和last指向的元算作为输入:通过result作为输出:通过函数对象来做自定义数据类型的运算.…
1 STL的string 1 String概念 string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字符串,那么二者有什么区别呢. string和char*的比较 string是一个类, char*是一个指向字符的指针. string封装了char*,管理这个字符串,是一个char*型的容器. string不用考虑内存释放和越界. string管理char*所分配的内存.每一次string的复制,取…
转自:https://blog.csdn.net/bobodem/article/details/49386131 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优缺点,不同的容器反映出程序设计的不同需求.容器自身可能由数组或链表实现,或者容器中的每个元素都有特殊的关键值. 迭代器 用于遍历一个数据集中的每个元素.这些数据集可能是容器或者容器的子集.迭代器的主要优点是它们为任意类型的容器提供一个小巧并且通用(注意通用很重要)的接口.例如,迭代器接口的一个操作是…
STL Queue 容器 Queue简介         queue是队列容器,是一种“先进先出”的容器.         queue是简单地装饰deque容器而成为另外的一种容器.        #include <queue> queue对象的默认构造 queue采用模板类实现,         queue对象的默认构造形式:        queue<T> queT 示例: queue<int> queInt; //一个存放int的queue容器. queue&l…
STL stack 容器 Stack简介 stack是堆栈容器,是一种“先进后出”的容器.      stack是简单地装饰deque容器而成为另外的一种容器.      #include <stack> stack对象的默认构造 stack采用模板类实现,          stack对象的默认构造形式:          stack <T> stkT; 示例: stack <int> stkInt; //一个存放int的stack容器. stack <floa…
STL Deque 容器 Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双 端的,而vector是单端的.         deque在接口上和vector非常相似,在许多操作的地方可以直接替换.        deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲).          deque头部和尾部添加或移除元素都非常快速.但是在中部安插元素或移除元素比较费时.     …
浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容器,但是由于它的使用方法等等和\(STL\)容器很像,所以就把它当作\(STL\)容器一样介绍. 其实\(string\)容器就是个字符串,这通过它的英文译名就能看得出来.但是对于字符串以及字符串的相关操作,可能读者还是对普通的\(C/C++\)的#include<cstring>,#includ…
详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\(map\)容器可和地图没什么关系.\(map\)是"映射容器",其存储的两个变量构成了一个键值到元素的映射关系. 比如下图: 我们可以根据键值快速地找到这个映射出的数据. \(map\)容器的内部实现是一棵红黑树(平衡树的一种),因为比较复杂而且与理解并无多大关系,所以不予介绍,有兴趣的读…
浅谈C++ STL list 容器 本篇随笔简单讲解一下\(C++STL\)中\(list\)容器的使用方法和使用技巧. list容器的概念 学习过\(C++STL\)的很多同学都知道,\(STL\)(标准模板库)中的容器其实都是我们在算法竞赛中常用数据结构的一些模板.比如说\(queue\)模拟的队列,\(priority\_queue\)模拟的堆等等.那么,我们可以把\(list\)理解为模拟数据结构中"双向链表"的模板. 关于双向链表的基本概念以及手动模拟实现,如有不懂的同学可以…
最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存? // 站点与TCP连接映射表 (key为ip_port_stationCode, value为 clientSocket*) std::map<String, DataUpload*> g_TcpConnMap; // 遍历站点列表,为每个服务器id[ip:port]的每个站点(station code)建立一个TCP连接 for (auto& staionItem : server.Host().…
这里简单学习一下STL关联容器,主要是map.multimap.set.multiset以及unordered_map.前四个底层实现都是利用红黑树实现的,查找算法时间复杂度为\(O(log(n))\),而unordered_map从名字上就知道是无序容器,其实现原理类似哈希表,查找算法时间复杂度\(O(1)\). set.multiset.map.multimap set容器是一个存储有序唯一元素的数据结构.不允许有重复元素.其底层实现为红黑树.multiset原理与set相同,不同的是允许有…
文章目录 2.7.1 引入 2.7.2代码示例 2.7.3代码运行结果 总结 2.7.1 引入 STL list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的.这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中. 链表是由一系列的节点组成,结点包含两个域,一个数据域,一个指针域. 由于链表内存是非连续的,因此添加删除元素时间复杂度都是常数项,不需要移动元素,比数组添加删除效率高. 链表只有在需要的时候才分配内存. 链表需要额外的空间…
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html 在C++的STL库中,要实现排序可以 通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在通过 vector+sort进行排序时,所有元素需要先存入vector容器中,sort在排序时又需要将元素全部取出来再进…
vector:(连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间的插入,删除元素要慢,而且如果一开始分配的空间不够的话,可能重新分配更大空间,拷贝的性能开销较高. deque:(小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快速的访问随机的元素,快速的在开始和末尾插入元素,但随机的插入,删除元素要慢,空间的重新分配要比vector快,重新分配空间后,原有的元素不需要拷贝.对…
map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除:O(logN) hash_map, hash_set, hash_multimap, and hash_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入:O(1),最坏情况O(N). 查看:O(1),最坏情况O(N). 删除:O(1),最坏情况O(N). 记住,如果你采…
list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的.  如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间. STL   中的   map   内部是平衡二叉树,所以平衡二叉树的性质都具备.查找数据的时间也是对数时间. vector,在…
STL共有六大组件1.容器 2.算法 3.迭代器 4.仿函数 6.适配器 STL容器的实现原理 STL来管理数据十分方便,省去了我们自己构建数据结构的时间.其实,STL的实现也是基于我们常见的数据结构. 序列式容器:vector-数组,元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组中.list-双链表.deque-分配中央控制器map(并非map容器),map记录着一系列的固定长度的数组的地址.记住这个map仅仅保存的是数组的地址,真正的数据在数组中存放着.deque先从map中央的…