C++ STL 容器、迭代器、适配器
文章平均质量分 95
# C++ STL 容器、迭代器、适配器
双子座断点
不断学习提升自己,慢慢的通过博客将自己所学、所会、所用陆续分享给大家
展开
-
C++ STL array 容器(深入了解,一文学会)
array 容器是 C++ 11 标准中新增的序列容器,简单地理解,它就是在 C++ 普通数组的基础上,添加了一些成员函数和全局函数。在使用上,它比普通数组更安全,且效率并没有因此变差。和其它容器不同,array 容器的大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。C++ 11 标准库还新增加了 begin() 和 end() 这 2 个函数,和 array 容器包含的 begin(...原创 2021-09-02 02:12:07 · 2623 阅读 · 0 评论 -
C++ STL vector容器(深入了解,一文学会)
vector 的底层为顺序表(数组)。vector<T> (泛型) 容器是包含 T 类型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。 vector<T> 容器可以方便、灵活地代替数组。在大多数时候,都...原创 2021-09-02 02:14:42 · 1542 阅读 · 0 评论 -
C++ STL priority_queue容器适配器(深入了解,一文学会)
priority_queue 容器适配器模拟的也是队列这种存储结构,即使用此容器适配器存储元素只能“从一端进(称为队尾),从另一端出(称为队头)”,且每次只能访问 priority_queue 中位于队头的元素。 但是,priority_queue 容器适配器中元素的存和取,遵循的并不是 “First in,First out”(先入先出)原则,而是“First in,Largest out”原则。直白的翻译,指的就是先进队列的元素并不一定先出队列,而是优先级最大的元素最先出...原创 2021-09-03 00:03:51 · 391 阅读 · 0 评论 -
C++ STL unordered_set容器(深入了解,一文学会)
unordered_set 容器,可直译为“无序 set 容器”,即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。总的来说,unordered_set 容器具有以下几个特性:不再以键值对的形式存储数据,而是直接存储数据的值; 容器内部存储的各个元素的值都互不相等,且不能被修改。 不会对内部存储的数据进行排序(这和该容器底层采用哈希表结构存储数据有关;对于 unorde...原创 2021-09-03 00:02:17 · 7958 阅读 · 0 评论 -
C++ STL stream_iterator流迭代器(深入了解,一文学会)
流迭代器也是一种迭代器适配器,不过和之前讲的迭代器适配器有所差别,它的操作对象不再是某个容器,而是流对象。即通过流迭代器,我们可以读取指定流对象中的数据,也可以将数据写入到流对象中。介于流对象又可细分为输入流对象(istream)和输出流对象(ostream),C++ STL 标准库中,也对应的提供了 2 类流迭代器:将绑定到输入流对象的迭代器称为输入流迭代器(istream_iterator),其可以用来读取输入流中的数据; 将绑定到输出流对象的迭代器称为输出流迭...原创 2021-09-04 00:36:57 · 3063 阅读 · 1 评论 -
C++ STL pair 类模板(深入了解,一文学会)
关联式容器存储的是“键值对”形式的数据,比如:map<int,string> int对应相应的string字符串 key和value对一对一对应关系。注意,基于各个关联式容器存储数据的特点,只有各个键值对中的键和值全部对应相等时,才能使用 set 和 multiset 关联式容器存储,否则就要选用 map 或者 multimap 关联式容器。这个怎么理解呢? 各个键值对中的键和值全部对应相等时,才能使用 set 和 multiset 关联式容器存储...原创 2021-09-02 02:23:59 · 968 阅读 · 1 评论 -
C++ STL map容器(深入了解,一文学会)
作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括C++ 基本数据类型(int、double 等)、使用结构体或类自定义的类型。在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。默认情况下,map 容器选用std::less<T>排序规则(其中 T 表示键的数据类型),其会根据键的大小对所有键值对做升序排序。当然,...原创 2021-09-02 02:25:46 · 1478 阅读 · 2 评论 -
C++ STL map emplace()和emplace_hint()(深入了解,一文学会)
C++ STL Map模板类中除了 insert() 方法 还提供了 emplace() 和 emplace_hint() 成员函数,也可以实现向 map 容器中插入新的键值对。本节就来讲解这 2 个成员方法的用法。值得一提的是,实现相同的插入操作,无论是用 emplace() 还是 emplace_hont(),都比 insert() 方法的效率高后半篇会详解。和 insert() 方法相比,emplace() 和 emplace_hint() 方法的使用要简单很多,因为它们各...原创 2021-09-02 02:26:41 · 12138 阅读 · 2 评论 -
C++ STL unordered_multiset容器(深入了解,一文学会)
unordered_multiset 容器大部分的特性都和 unordered_set 容器相同,包括:unordered_multiset 不以键值对的形式存储数据,而是直接存储数据的值; 该类型容器底层采用的也是哈希表存储结构,它不会对内部存储的数据进行排序; unordered_multiset 容器内部存储的元素,其值不能被修改。和 unordered_set 容器不同的是,unordered_multiset 容器可以同时存储多个值相同的元素,且这些元素会存储到哈希表中同一个桶(本质就是原创 2021-09-03 00:02:52 · 1751 阅读 · 0 评论 -
C++ STL move_iterator移动迭代器(深入了解,一文学会)
C++ 11 还为 STL 标准库增添了一种迭代器适配器,即本节要讲的 move_iterator 移动迭代器适配器。move_iterator 迭代器适配器,又可简称为移动迭代器,其可以实现以移动而非复制的方式,将某个区域空间中的元素移动至另一个指定的空间。1 move_iterator移动迭代器的创建...原创 2021-09-04 00:41:44 · 2266 阅读 · 0 评论 -
C++ STL 容器、迭代器、适配器(深入了解,一文学会)
什么是STL? STL,即标准模板库。高效的C++程序库。因为在各类C++ 项目中STL库都在广泛应用,包括作者在开发项目和对接第三方SDK、API的时候,尤其是封装过程中、接口、数据传输过程中都离不开STL模板的存在。vector、deque、list、forward_list、array、map/multimap、set/multiset。 尤其是经常处理涉及万级别以上的数据量的时候传统的string int char 等数组,远远没有容器的处理效率以及不同的序列式容器...原创 2021-09-02 02:09:42 · 1916 阅读 · 0 评论 -
C++ STL insert_iterator插入迭代器适配器(深入了解,一文学会)
插入迭代器适配器(insert_iterator),简称插入迭代器或者插入器,其功能就是向指定容器中插入元素。值得一提的是,根据插入位置的不同,C++ STL 标准库提供了 3 种插入迭代器:迭代器适配器 功能 back_insert_iterator 在指定容器的尾部插入新元素,但前提必须是提供有 push_back() 成员方法的容器(包括vector、deque 和 list)。 front_insert_iterator 在指定容器的头部插入新元素,但...原创 2021-09-03 00:09:30 · 2168 阅读 · 0 评论 -
C++ STL unordered_map容器(深入了解,一文学会)
iterator erase ( const_iterator position );unordered_map 无序map容器,正常map容器是有序的会自动执行排序功能,由于 unordered_map 容器底层采用的是哈希表存储结构,该结构本身不具有对数据的排序功能,所以此容器内部不会自行对存储的键值对进行排序。本文作者原创,转载请附上文章出处与本文链接。1 unordered_map容器...原创 2021-09-03 00:01:33 · 7904 阅读 · 0 评论 -
C++ STL deque容器(深入了解,一文学会)
所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。Vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。deque对象在队列的两端放置元素和删除元素是高效的,而向量vector只是在插入序列的...原创 2021-09-02 02:19:26 · 672 阅读 · 0 评论 -
C++ STL Set容器(深入了解,一文学会)
和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。通过前面的学习我们知道,map、multimap 容器都会自行根据键的大小对存储的键值对进行排序,set 容器也会如此,只不过 set 容器中各键值对的键 key 和值 value 是相等的,根据 key 排序,也就等价为根据 value 排序。另外,使用 set 容器存储的各个元素的值必须各不相同。更重要的是,从语法上讲 set 容器...原创 2021-09-03 00:00:39 · 5495 阅读 · 1 评论 -
C++ STL multiset容器(深入了解,一文学会)
在此基础上,C++ STL 标准库中还提供有一个和 set 容器相似的关联式容器,即 multiset 容器。所谓“相似”,是指 multiset 容器遵循 set 容器的前 3 个特性,仅在第 4 条特性上有差异。和 set 容器不同的是,multiset 容器可以存储多个值相同的元素。也就是说,multiset 容器和 set 容器唯一的差别在于,multiset 容器允许存储多个值相同的元素,而 set 容器中只能存储互不相同的元素。set 容器具有以下几个特性:不再以...原创 2021-09-03 00:00:57 · 726 阅读 · 0 评论 -
C++ STL multimap容器(深入了解,一文学会)
multimap容器 和map容器,都是关联式容器。所谓“相似”,指的是 multimap 容器具有和 map 相同的特性,即 multimap 容器也用于存储 pair<const K, T> 类型的键值对(其中 K 表示键的类型,T 表示值的类型),其中各个键值对的键的值不能做修改;并且,该容器也会自行根据键的大小对存储的所有键值对做排序操作。和 map 容器的区别在于,multimap 容器中可以同时存储多(≥2)个键相同的键值对。本文作者原创,转载请附上文章出处...原创 2021-09-02 02:30:08 · 638 阅读 · 0 评论 -
C++ STL list容器(深入了解,一文学会)
list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。list 容器中各个元素的前后顺序是靠指针来维系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。其中第一个元素的前向指针总为 null,因为它前面没有元素;同样,尾部元素的后向指针也总为 null。基于这样的存储结构,list 容器具有一些其它容器(array、...原创 2021-09-02 02:17:41 · 1371 阅读 · 2 评论 -
C++ STL forward_list容器(深入了解,一文学会)
forward_list 是 C++ 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表,而 list 使用的是双向链表。链表中数据的存储位置是分散的、随机的,整个链表中数据的线性关系通过指针来维持。forward_list 容器具有和 list 容器相同的特性,即擅长在序列的任何位置进行插入元素或删除元素的操作,但对于访问存储的元素,没有其它容器(如 array、vector...原创 2021-09-02 02:22:52 · 1452 阅读 · 0 评论 -
C++ STL queue容器适配器(深入了解,一文学会)
queue容器适配器和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据。这种存储结构最大的特点是,最先进入 queue 的元素,也可以最先从 queue 中出来,即用此容器适配器存储数据具有“先进先出(简称 "FIFO" )”的特点,因此 queue 又称为队列适配器。其实,STL queue 容器适配器模拟的就是队列这种存储结构,因此对于任何需要用队列进行处理的序列来说,使用 queue 容...原创 2021-09-03 00:03:30 · 434 阅读 · 0 评论 -
C++ STL stack容器适配器(深入了解,一文学会)
stack 栈适配器是一种单端开口的容器(如图 1 所示),实际上该容器模拟的就是栈存储结构,即无论是向里存数据还是从中取数据,都只能从这一个开口实现操作。stack 适配器的开头端通常称为栈顶。由于数据的存和取只能从栈顶处进行操作,因此对于存取数据,stack 适配器有这样的特性,即每次只能访问适配器中位于最顶端的元素,也只有移除 stack 顶部的元素之后,才能访问位于栈中的元素。栈中存储的元素满足“后进先出(简称LIFO)”的准则,stack 适配器也同样遵循...原创 2021-09-03 00:03:14 · 492 阅读 · 0 评论 -
C++ STL streambuf_iterator流缓冲区迭代器(深入了解,一文学会)
我们知道在 C++ STL 标准库中,流迭代器又细分为输入流迭代器和输出流迭代器,流缓冲区迭代器也是如此,其又被细分为输入流缓冲区迭代器和输出流缓冲区迭代器:输入流缓冲区迭代器(istreambuf_iterator):从输入流缓冲区中读取字符元素; 输出流缓冲区迭代器(ostreambuf_iterator):将连续的字符元素写入到输出缓冲区中。流缓冲区迭代器和流迭代器最大的区别在于,前者仅仅会将元素以字符的形式(包括 char、wchar_t、char16_t ...原创 2021-09-04 00:39:30 · 2866 阅读 · 0 评论 -
C++ STL reverse_iterator反向迭代器适配器(深入了解,一文学会)
反向迭代器适配器(reverse_iterator),可简称为反向迭代器或逆向迭代器,常用来对容器进行反向遍历,即从容器中存储的最后一个元素开始,一直遍历到第一个元素。值得一提的是,反向迭代器底层可以选用双向迭代器或者随机访问迭代器作为其基础迭代器。不仅如此,通过对 ++(递增)和 --(递减)运算符进行重载,使得:当反向迭代器执行 ++ 运算时,底层的基础迭代器实则在执行 -- 操作,意味着反向迭代器在反向遍历容器; 当反向迭代器执行 -- 运算时,底层的基础迭代器实则在执行 ++...原创 2021-09-03 00:07:36 · 2348 阅读 · 1 评论