STL总结

本文详细介绍标准模板库(STL)的基本概念,包括容器、迭代器、算法等核心组件的功能与使用方法。涵盖容器的特性、操作接口及迭代器的不同类型,并举例说明了常用算法的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL

1:STL由一些可适应不同需求的集合类(collection class),以及在这些数据集合上操作的算法(algorithm)构成

2:容器(Container) - 管理某类对象的集合

迭代器(Iterator) - 在对象集合上进行遍历

算法(Algorithm) - 处理集合内的元素

容器适配器(container adaptor)

函数对象(functor)

3:所有容器中存放的都是值而非引用。

所有元素都形成一个次序(order),可以按相同的次序一次或多次遍历每个元素。

4:STL容器元素的条件:

必须能够通过拷贝构造函数进行复制

必须可以通过赋值运算符完成赋值操作

必须可以通过析构函数完称销毁动作

序列式容器元素的默认构造函数必须可用

某些动作必须定义operator ==,例如搜寻操作

关联式容器必须定义出排序准则,默认情况是重载operator <

5:size()-返回当前容器的元素数量

empty()-判断容器是否为空

max_size()-返回容器能容纳的最大元素数量。

6:begin()-返回一个迭代器,指向第一个元素

end()-返回一个迭代器,指向最后一个元素之后

rbegin()-返回一个逆向迭代器,指向逆向遍历的第一个元素

rend()-返回一个逆向迭代器,指向逆向遍历的最后一个元素之后

7:insert(pos,e)-将元素e的拷贝安插于迭代器pos所指的位置

erase(beg,end)-移除[beg,end]区间内的所有元素

clear()-移除所有元素。

8:迭代器(iterator)(示例:iterator)

可遍历STL容器内全部或部分元素的对象

指出容器中的一个特定位置

9:begin()  返回一个迭代器,指向第一个元素

end()   返回一个迭代器,指向最后一个元素之后

10:迭代器(iterator):

双向迭代器:①:可以双向行进,以递增运算前进或以递减运算后退、可以用==和!=比较。

②:list、set和map提供双向迭代器

随机存取迭代器

①:除了具备双向迭代器的所有属性,还具备随机访问能力。

②:可以对迭代器增加或减少一个偏移量、处理迭代器之间的距离或者使用<和>之类的关系运算符比较两个迭代器。

③:vector、deque和string提供随机存取迭代器

11:赋值操作

c1 = c2 将c2的全部元素赋值给c1

c.assign(n,e)  将元素e的n个拷贝赋值给c

c.assign(beg,end)  将区间[beg,end]的元素赋值给c

c1.swap(c2)  将c1和c2元素互换

12:移除(remove)元素

c.pop_back()  移除最后一个元素但不返回最后一个元素

c.erase(pos)  删除pos位置的元素,返回下一个元素的位置

c.erase(beg,end) 删除区间[beg,end]内所有元素,返回下一个元素的位置

c.resize(num)  将元素数量改为num(增加的元素用defalut构造函数产生,多余的元素被删除)

13:map/multimap

使用平衡二叉树管理元素

元素包含两部分(key,value),key和value可以是任意类型

必须包含的头文件#include <map>

根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢

不能直接改变元素的key,可以通过operator []直接存取元素值

map中不允许key相同的元素,multimap允许key相同的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值