STL

C++ STL vector容器入门

就普通数组而言,array不过是封装一个类的把戏罢了,只能称之为pro版数组;而对于vector来说,则是一台完美的重装坦克,升级为promax版数组,兼顾动态扩展和多种功能,成为算法竞赛上的常用数组容器。vector与前面两者不同,能够做到动态扩展,相比传统数组而言更加灵活。如果读者对array是否为动态数组而感到疑虑,则可自行跳转《千万别认为array容器是动态数组!》去一探究竟。vector

C++ STL map容器如何获取值(value)?

在基本掌握map容器及其迭代器的基础下,本节将带领读者一起谈论如何获取map中的value。前面我们提到map重载了'[]'符号,能够通过'[]'添加或查看value;还有find()输入key获取指向value的迭代器;其实我们还能通过at()来获取value,count()查看value是否存在。通过代码分别展示3种方式:#include<bits/std

深入学习C++ STL map容器的迭代器

和很多容器一样,map有正向迭代器begin()、end(),有反向迭代器rbegin()、rend(),还有常量迭代器cbegin()、cend()、crbegin()、crend(),(c表示const,可读不可改),这些迭代器都是双向迭代器,只能进行++或--操作,不能+5或-8随机访问。本节抓重点,主要讲map的其他迭代器。在前一节我们就总结了map常用成员函数,可跳转《初识ST库中的ma

判断C++ STL list容器是否为空,都给我用empty()!

在判断链表容器是否为空时,有人喜欢用size(),有人喜欢用empty(),这两种方法都可以成功判断list是否为空。如果读者使用的是empty(),那我没话说;但如果读者使用的是size(),读者可就要慎用了,因为在数据量很大的情况下,size()这会降低运行效率。这是为什么呢?要知道,STL大师不会任意制造“容器垃圾”,list有empty()这个成员函数就一定有它的道理。在C++11前,由于

C++ STL关联式容器简介

前面我们已经把序列式容器全部学习了,包括array、vector、deque、list和 forward_list,本节我们将进行关联式容器的学习。那什么是关联式容器呢?在回答这个问题之前,读者是否还记得序列式容器查找和修改元素都是按什么条件进行的,答案是“位置”,不管是vector、deque还是 list,他们都是以线性容器的方式,依靠“位置”进行查找和删改;关联式容器并不依靠“位置”进行元素

C++ STL list容器入门

链表这种数据结构想必大家都不陌生吧!通过指针链接数据,就像锁链一样将数据”穿“起来,充分利用了”零碎内存“,提高内存空间利用率!如果读者还不熟悉链表这种数据结构,可自行跳转《链表》去学习一下链表。在STL库中,list是以双向链表的身份进入序列式容器集合的。每一个节点(node)都具备一前一后各一个指针,分别指向前节点后后节点,可以想到首节点前指针为NULL,尾节点后指针为NULL。链表不同于ve

深入学习C++ STL set容器的迭代器

前面我们初识了set容器,本节将会详细介绍set容器的迭代器,set容器迭代器和map容器、multimap容器一样都是双向迭代器,只能进行++或--操作,不能进行随机访问。同此,set容器有正向迭代器begin()、end(),有反向迭代器rbegin()、rend(),还有常量迭代器cbegin()、cend()、crbegin()、crend(),(c表示const,可读不可改)。由于set

C++ STL set容器入门

对于SLT库中的关联式容器,我们第一个学到的容器就是map,它属于有序关联式容器且只允许唯一键值存在;当允许重复键值存在时,我们就学习了multimap。今天我们开始学习set容器,set可以被视为是特殊的map,它要求键必须等于值。所以,插入时只需要放入一个元素即可,可见“键值对”的概念被隐式转换了。set最大的特点是能够自动去重和排序,其底层是红黑树实现,时间复杂度为O(log n),相比动态

C++ STL map容器中,insert()和'[]'谁的插入效率更高?

在前面《如何为STL库中的map添加元素?》我们总结了4种方式为map容器插入元素,最常用的就是insert()和'[]'了。相必读者一定很好奇到底是谁的插入效率更高,用哪一个更好。这里先不直接公布答案,先看看直观的代码测试:#include<bits/stdc++.h>//万能头#include<string>#include<map>//

C++ STL无序关联式容器简介

前面我们已经深入学习了有序关联式容器,本节将继续学习关联式容器的另外一个分支——无序关联式容器。从名字上我们就可以看出,无序关联式容器的特点是“无序”,那怎么个“无序“法?根据前面对关联式容器的学习读者不难猜出,此处”无序“意为——元素不会自动进行排序,而且杂乱地存放在一段空间内。无序关联式容器,又被称为"哈希容器",底层通过哈希表实现。可简单理解为:通过哈希函数把key映射为