STL内容总结

一、概述
STL: Standard Template Library
STL是算法 泛型算法 和其他的一些组件的集合
STL是C++标准的一个重要的组成部分。
STL的主要组件://他并不是仅仅针对某种类型而是对于很多类型。
二、STL组件
容器—— 管理某类对象的集合
迭代器—— 在对象集合上进行遍历
算法——处理集合内的元素
容器适配器
函数对象
三、STL类别
序列式容器-排列次序取决于插入时机和位置
关联式容器-排列顺序取决于特定准则
四、STL容器元素的条件
1、
必须能够通过拷贝构造函数进行复制;
必须可以通过赋值运算符完成赋值操作;
必须可以通过析构函数完称销毁动作;
序列式容器元素的默认构造函数必须可用;
某些动作必须定义operator ==,例如搜寻操作 关联式容器必须定义出排序准则,默认情况是重载operator <
2、迭代器对象必须和容器类型一致
3、迭代器分为双向迭代器和随机存取迭代器
五、操作
1、与大小相关操作:
size()——返回当前容器的元素数量
empty()——判断容器是否为空
max_size()——返回容器能容纳的最大元素数量
2、比较操作
两端的容器必须属于同一类型
采用字典式顺序判断某个容器是否小于另一个
3、赋值和交换(swap)操作
swap提高赋值操作效率
4、元素
insert(pos,e)——将元素e的拷贝安插于迭代器pos所指的位置
erase(beg,end)——移除【beg,end]区间内所有元素
clear()——移除所有元素
六、容器的通用功能
1、

用默认构造函数构造空容器
支持关系运算符:== ,!= , < , <=, > ,>=
clear():将容器清空
empty():判断容器是否为空
size():得到容器元素个数
s1.swap(s2):将s1和s2两个容器内容交换
随机访问容器获得容器s的第n个元素
s[i]获得容器s的第n个元素
相关迭代器类型(s表示容器类型)
s.iterator:指容器元素的迭代器类型
向量(vector)

2、特点:
一个可以扩张的动态数组
随机访问
在尾部插入或删除一个元素快,在中间或则头部插入元素慢
向量的容量
容量(capacity):实际分配空间的大小
s.capacity():返回当前容量
s.reserve(n):若容量小于n,则对s进行扩展,使其容量至少为n。
七、迭代器
1、概述
可遍历STL容器内全部或部分元素的对象
指出容器中的一个特定位置
2、操作
*:返回当前位置上的元素值,如果该元素有成员,可以通过迭代器以operator->取用
++:将迭代器前进到下一个元素
begin() :返回一个迭代器,指向第一个元素
end():返回一个迭代器,指向最后一个元素之后
3、分类
①可以双向进行,以递增运算前进或以递减运算后退,用 = =和!=比较
list\set\map提供双向迭代器
例:listl;
for(pos=l.begin();pos!=l.end();++pos{

}
②随机存储迭代器
例:
vextorv;
for(pos=v.begin();pos<v,end();++pos
{

}
八、Vector
1、概述
模拟动态数组
元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)
必须包含头文件#include
支持随机存取
size返回实际元素个数
capacity返回vector能容纳的元素最大数量。
2、操作

vectorc 产生空的vector
vectorc1(c2) 产生同类型的c1,并将复制c2的所有元素
vectorc(n) 利用类型T的默认构造函数和拷贝构造函数生成一个大小为n的vector
vectorc(n,e) 产生一个大小为n的vector,每个元素都是e
vectorc(beg,end) 产生一个vector,以区间【beg,end】为元素初值
~vector() 销毁所有元素并释放内存

c.size() 返回元素个数
c.empty() 判断容器是否为空
c.max_size() 返回元素最大可能数量(固定值)
c.capacity() 返回重新分配空间前可容纳的最大元素数量
c.reserve(n) 扩大容量为n

at(idx) 返回索引idx所标识的元素的引用,进行越界检查
oprator [] (idx) 返回索引idx所标识的元素的引用,不进行越界检查

c.insert(pos,e) 在pos的位置插入元素e的副本,并返回新元素的位置
c.insert(pos,n,e) 在pos的位置插入n个元素e的副本
c.insert(pos,beg,end) 在pos的位置插入区间【beg,end】内所有元素的副本
c.push_back(e) 在尾部添加一个元素e的副本
九、map/multimap
1、概念
元素包含两部分(key,value),key和value可以是任意类型;
根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢 ;
不能直接改变元素的key,可以通过operator []直接存取元素值;
map中不允许key相同的元素,multimap允许key相同的元素。
map可以是下列形式:
map<key,value> 一个以less(<)为排序准则的map,
map<key,value,op> 一个以op为排序准则的map
(它们的操作很多都和vector一样或类似)
pair 模板:
pair模板可以用于生成 key-value对。
十、算法:(算法是基于泛型也就是模板的)
1、count:
size_t count(InIt first, InIt last, const T& val);// 计算[first,last) 中等于val的元素个数

2、count_if:
size_t count_if(InIt first, InIt last, Pred pr); 计算[first,last) 中符合pr(e) == true 的元素 e的个数

3、min_element:
template
FwdIt min_element(FwdIt first, FwdIt last);
返回[first,last) 中最小元素的迭代器,以 “< ”作比较器

4、max_element:
template
FwdIt max_element(FwdIt first, FwdIt last);
返回[first,last) 中最大(不小)元素的迭代器,以 “< ”作比较器

5、for_each:
template<class InIt, class Fun>
Fun for_each(InIt first, InIt last, Fun f);
对[first,last)中的每个元素 e ,执行 f(e) , 要求 f(e)不能改变e

十一、排序和查找算法:
1、find:
template<class InIt, class T>
InIt find(InIt first, InIt last, const T& val);
返回区间 [first,last) 中的迭代器 i ,使得 * i == val

2、find_if:
template<class InIt, class Pred>
InIt find_if(InIt first, InIt last, Pred pr);
返回区间 [first,last) 中的迭代器 i, 使得 pr(*i) == true

3、binary_search 折半查找,要求容器已经有序且支持随机访问迭代器,返回是否找到
lower_bound,uper_bound, equal_range

4、sort 快速排序:
template
void sort(RanIt first, RanIt last);
按升序排序。判断x是否应比y靠前,就看 x < y 是否为true
template<class RanIt, class Pred>
void sort(RanIt first, RanIt last, Pred pr);

5、改变序列
template
FwdIt unique(FwdIt first,FwdIt last);
用==比较是否相等
template<class FwdIt,class Pred>
FwdIt unique(FwdIt first,FwIt lasy,Pred pr);
用pr比较是否相等
去除【first,last)这个剩下序列中的重复元素
返回值是迭代器,指向元素删除后的区间的最后一个元素的后面

6、逆序
reverse
template
void reverse(BidIt first,BidIt last);
颠倒区间[first,last)顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值