本文适合有一定基础的人查阅和复习使用
初识STL:
广义STL分为:容器,算法,迭代器。
容器与算法之间通过迭代器进行无缝连接。
STL的六大组件:容器,算法,迭代器,仿函数,适配器(配接器),空间适配器。
以下主要介绍容器,算法,迭代器,仿函数;
容器:主要分为两种容器,
序列式容器(强调值的排序),关联式容器(二叉树结构,各元素之间没有严格上的物理排序)
算法:分为质变算法和非质变算法; 注:需要引入头文件#include
质变算法(运算期间会改变区间的元素内容,如:拷贝,替代,删除),非质变算法(不会改变区间的元素内容,如:查找,计数,遍历)
迭代器:容器和算法之间的粘合剂
每个容器都有属于自己的专属迭代器,类似于指针,分为:输入迭代器,输出迭代器,向前迭代器,双向迭代器,随机访问迭代器。
STL基础内容
String容器
#include
构造函数(参考类中的各类构造函数)
string'赋值 *** 作
=赋值,
str.assign()赋值
append函数与assign函数类似
字符串拼接
+=拼接号 可以直接拼接字符串
str.append()函数拼接.
括号内前字母后数字可以是仅拼接前n个
函数括号中可以输入第一个到第n个字母实现拼接到str字符串str1.append(str2,0,4)
字符串查找与替换
str1.find("str")可以返回int类型数据查找到需要找的字符串的位置起始坐标,没有的话返回值为-1
str1.rfind()函数 rfind函数为从右往左查找函数,其余与find函数类似
str.replace(x,y,"str")将下标由x号位置起到y号位置的字符串替换为str
注:容器自带函数中的各种函数要求的位置均为迭代器类型
字符串的比较
int compare (const string &s) const函数原型
c语言中strcmp()函数
str1.compare(str2)返回值为零则两字符串相等,大于零则str1大于str2,反之亦然
字符串存取
str.size()函数访问字符串长度。
1.通过[]访问字符
2.通过str.at(i)访问字符
字符串插入与删除
插入str.insert(int n, string str)在n下标插入字符串
删除str.erase(int pos,int n)从某个位置开始删除n个字符
子串获取
str.substr(int pos,int pos),从初始位置到末位置的一段字符串
vector容器
与数组十分相似,也称为单端数组
vector可以动态扩展
并不是在原空间之后续接空间,而是寻找更大的空间,然后将原数据拷贝新空间,释放原空间
vector构造函数
vector
vector(v.begin(),v.end()) 将v[begin(),end()]区间中的元素拷贝给本身
vector(n,elem) 构造函数,将n个elem拷贝给本身
vector(const vector &vec) 拷贝构造函数
vector赋值 *** 作
重载等号运算符
assign(begin,end),将区间[begin,end]区间的数据拷贝赋值给本身
assign(n,elem),将n个elem赋值给本身
vector容器和大小
empty()判断容器是否为空,返回值为真则为空
capacity() 判断容器的容量
size() 判断容器的大小
resize(int num) 重新指定容器的长度为num,则以默认值填充新位置,如果容器变短,则末尾超出容器的元素会被删除,默认值通常为0
resize(int num,elem)重新指定容器的长度为num,若容器变长,则以elem的值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除
vector插入和删除
push_back(ele) 尾部插入元素ele
pop_back() 删除最后一个元素
insert(pos,ele)迭代器指向pos插入元素ele
insert(pos,int count,ele)迭代器指向的pos插入count个元素ele
erase(pos,)删除迭代器指向的位置
erase(start,end) 删除迭代器从start到end之间的元素
clear() 删除容器中的所有元素
vector数据存取
at(int idx) 返回索引idx所指的数据
operator[]返回索引idx所指的数据
front() 返回容器中的第一个数据元素
back() 返回数据中的最后一个数据元素
vector容器互换
swap(vec)
实际用途:巧用swap可以收缩内存空间
vector预留空间
reserve(len)
容器预留len个元素长度,预留位置不初始化,元素不可访问
deque容器
被称为双端数组
deque构造函数
参考vector;
const容器对应const迭代器
deque赋值 *** 作
参考vector
deque大小 *** 作
参考vector,deque无容量概念
deque插入和删除
参考vector,deque容器包含头删与头插
deque数据存取
同vector
deque排序
sort(iterator beg,iterator end),支持随机访问的容器
stack栈容器
接口
stack
stack(const stack &stk)//拷贝构造函数
stack& operator=(const stack &stk)//重载等号赋值
push(elem)//向栈顶添加元素
pop()//从栈顶移除数据
top()//返回栈顶元素
empty()//判断是否为空
size()//返回栈的大小
容器特性:先进后出
queue容器
仅有队头与队尾可访问,不可遍历
先进先出,队列容器
接口
构造函数类似于stack容器
//重载等号运算符赋值
push(elem)往队尾添加元素
pop() 从队头移除元素
back() 返回最后一个元素
front() 返回第一个元素
empty()
size()
list容器
链表:数据域和值阵域,指针域储存下一个节点的位置/上一个节点位置
优点:可以对任意位置进行快速的插入和删除;
缺点:容器遍历,查找速度较慢,占用空间大小较大
迭代器:双向迭代器,仅可以向前或者向后,不支持随机访问,list容器中插入删除元素,不会导致迭代器的实效,在vector容器中是不成立的
list构造函数
list
list(beg,end);
....//与vector类似
list赋值和交换
参考vector
list大小 *** 作
empty()
size()
resize()
list插入和删除
参考vector容器和deque容器;
另:remove(elem)容器中所有elem元素删除
list数据存取
front()返回第一个元素
back()返回最后一个元素
list反转和排序
reverse()
sort()容器内部算法,不是标准算法
sort(myCompare)可指定排序顺序
全局函数
bool myCompare(int v1,int v2)
{
return (v1>v2)
}
set/multiset容器
set容器会对插入数据进行检测,而multiset不会
关联式容器,会自动排序数据,set容器特点:不允许有重复数据。
multiset容器:允许重复数据
构造函数:默认构造,拷贝构造
大小和交换:empty(),size(),swap(set)
插入和删除:insert(elem),clear(),erase(pos),erase(beg,end),erase(elem)
查找和统计:find(key)返回迭代器类型,若为end()则未找到
count(key) 返回int类型数据
内置类型指定排序规则,利用仿函数,在插入之前进行指定
class MyCompare
{
public:
bool operator()(int v1,int v2)
{
return (v1
set
自定义数据类型排序
map/multimap 容器
所有元素都为pair 详见最后定义
pai中第一个元素为key(键值)索引第二个为value(实际值)
关联式容器,按照key值排序
构造函数:默认构造,拷贝构造,赋值:重载等于号
大小和交换:size();empty();swap()
插入和删除:insert(elem),clear(),erase(pos),erase(beg,end),erase(elem)删除
key值元素
重载[]插入
查找和统计:find(key),count(key)
排序:仿函数改变规则
函数对象(仿函数)
本质上是一个类
谓词
返回值类型为bool的仿函数
内建函数对象
算术仿函数
逻辑仿函数
关系仿函数
pair对组
pair
pair
访问第一个数据p.first第二个p.second
附本人自做思维导图,如有遗漏欢迎补充
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)