STL标准库,持续更新-----

一、C++标准库:

容器、分配器、算法、迭代器、、适配器、仿函数。

容器解决了内存的问题,存储数据,由分配器支持:

1.容器有:string、vector、deque(双端队列)、list(双向链表)、forward_list、queue、priority_queue(优先队列)、stack、四种关联容器:set(集合,自动排序)、multiset、map、multimap、四种无关容器:unordered_set、unordered_multiset、unordered_map、unordered_mutimap。

2.分配器,用于分配管理内存空间:

3.迭代器是一种检查容器内元素并遍历元素的数据类型,通常用于对C++中各种容器内元素的访问,但不同的容器有不同的迭代器,初学者可以将迭代器理解为指针

它们都支持:

  • 比较两个迭代器是否相等(==、!=)。

  • 前置和后置递增运算(++)。

  • 读取元素的解引用运算符(*)。只能读元素,也就是解引用只能出现在赋值运算符的右边。

  • 箭头运算符(->),解引用迭代器,并提取对象的成员。

迭代器的种类这里不做描述,我们来说说哪些数据结构支持迭代器:

  • vector ——随机访问迭代器

  • deque——随机访问迭代器

  • list —— 双向迭代器

  • set / multiset——双向迭代器

  • map / multimap——双向迭代器

  • stack——不支持迭代器

  • queue——不支持迭代器

4.算法处理容器的数据,通过迭代器(半自动的指针):

算法一般包含的头文件为:<algorithm>、<functional>、<numeric>

一般函数:(要多加联系)

max()、min()、for_each(iterator beg,iterator end,_func):遍历容器,第一个为起始迭代器、第二个为结束迭代器、第三个为函数或者函数对象、查找算法:find查找元素、find_if根据条件查找、count返回元素个数、count_if()根据条件返回元素个数、adjacent_find查找相邻且重复的元素、binary_find()查找指定元素,但是不能查找无序元素、sort()排序函数、random_shuffle(iterator beg,iterator end)打乱函数、merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator target_beg)合并容器函数:注意要提前开辟空间、并且要同一个顺序。reverse()反转函数、swap()交换两个容器的元素,或者仅仅交换两个元素、replace()将容器内指定范围的旧元素替换为新元素、replace_if()按条件将替换元素、set_intersection()求交集、set_union()求并集()、set_difference()求差集。

5.仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。

6.适配器就是接口,对容器、迭代器、算法进行包装,但其实质还是容器、迭代器和算法,只是不依赖于具体的标准容器、迭代器和算法类型,适配器可以是算法适配器、迭代器适配器、容器适配器。


 

下面是对一段代码的解释,它详细描述了一个程序的各个代码是属于STL标准库的哪个部分

举例子:

1.vector<int ,allocator<int>> allocator为分配器,如果没有则为默认值。

2.count_if(vi.begin(),vi.end(),not1(bind2nd(less<int>(),40));其中count_if是算法,根据它的名字我们可以明白它是一个通过条件得到相加值的,里面的括号第一个元素和第二个元素是处理数据的范围,第三个元素是一层套一层。最里面的less<int>(),是仿函数,int是处理的数据类型,40是里面的第二个元素,在外面嵌套的是bind2nd它是一个函数适配器,它作为桥梁代表处理小于40的数据。最外面也是函数适配器它代表否定第一个元素,也就是大于或者等于40.

3.Container<T>::iterator ite = c.begin();其中iterator是一个范指针,它可以使用指针的所有操作。

4.在c++11后支持for(decl : coll){

 statement;

}其中decl是容器,coll是元素的合集,statement是具体操作。其中auto就是Container<T>::iterator ,auto&是引用,这样才能修改得到的元素。  
  

二、如何使用容器:

类型:

1.序列容器:list、vector、Deque、array、Forward-List适合做快速的查找

2.关联容器:Set/Multiset、Map\Multimap、(multi表示可以重复)、还要无序的map和set,它们也有可重复和不可重复的、HashTable:哈希表可以由多种方式实现,一般用链表实现,哈希表用于记录

注意:下面图片的容器名字可能有改变,请注意分别

容器的限制与缺陷、效率:

array(数组):

1.头文件:#include <array>

2.定义:array(long,size)//第一个为数据类型,第二个为大小

3.遍历:这里不过多描述,用for循环就可以了

4.函数:size()、front()、back()、data():传回该数组的地址

----------------------------------------------------------------------------------------------------------------------------

待补充

杂谈:

rand()获得随机数:int num = rand() % n +a;

     其中的a是起始值,n-1+a是终止值,n是整数的范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

years_GG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值