C++ STL 简单整理

STL

什么是STL
STL(Standard Template Library),即标准模板库,STL的一个重要特点是数据结构与算法的分离。另一个重要特性是STL不是面向对象的。

STL的六大组件

  • 容器(Container),是一种数据结构,如list,vector,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;

  • 迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;

  • 算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;

  • 仿函数(Functor)

  • 适配器(Adaptor)

  • 分配器(allocator)

算法头文件

#include <algorithm>

sort

sort(a, a+n);
//地址a 到a+n之间的内容排序,默认升序

reverse

reverse(a, a+n);
//数组翻转.

容器有以下六大类

在这里插入图片描述
还有一些变式

vector

//初始化     
vector<int> v;
vector<int> v(100);  //暂时开辟一百个内存
vector<int> v(100, 0);  //初始声明100个元素全为0
v.front();  // 求向量首元素
v.back();  // 求向量尾元素
v.push_back; // 往尾部添加元素
v.pop_back();  //删除尾部元素
v.size();  //  求向量元素个数
v.empty();  // 判断向量是否为空

stack

先进后出、栈顶删除、栈顶加入

stack<int> myStack;  //初始化栈
myStack.push(x); //栈顶元素入栈
myStack.pop(x); // 栈顶元素出栈
myStack.top(); //求栈顶元素
myStack.empty(); // 判断栈是否为空
myStack.size(); //求栈的大小

queue

queue<int> q; //初始化队列
q.front();         //求队头元素
q.back();		  //求队尾元素	
q.push(value);	//	队尾插入元素
q.pop();			// 队头删除元素
q.empty();		// 判断是否为空
q.size(); 			// 求队列元素个数

双端队列
在队列的基础上可在两端进出

deque<int> deq; //初始化双端队列

deq.front();  // 求队头元素
deq.back();   // 求队尾元素

deq.push_back(value); // 队尾添加元素
deq.push_front(value);// 队头添加元素

deq.pop_front();   // 队头删除元素
deq.pop_back();  //   队尾删除元素

deq.empty();  // 判断队列是否为空

deq.size();  // 求队列元素个数

优先队列(priority_queue)
随意插入
优先权最高的先出,定义一个优先权规则,插入自动按照优先权进行排序,每次弹出优先权最高的元素。

STL 默认设优先权最大为值最大。

完全平衡红黑树


priority_queue<int>pq; //初始化优先队列

pq.top();	// 求优先权最高的元素
pq.pop();	// 优先权最高的元素出队
pq.push(value);	//向队列添加元素
pq.empty();	//判断队列是否为空
pq.size();		//求队列元素个数

string

声明字符串			string s;
求字符串长度		s.length();
求字符串字串		
s.substr(begin, length); //begin开始位置,length是字串长度
s.substr(begin); //从begin开始到结尾
s.
字符串连接		可以用==<>、!=>=<=
字符串比较      可以用==<>、!=>=<=

集合

数学中:确定性、互异性、无序性
STL: 确定性、互异性、有序性(自动升序)
set <int> st;  	//	初始化集合
st.insert(value); // 插入元素 
st,erase(value); // 删除元素
st.count(value); // 查询元素,返回类型bool
st.empty(); 	// 判断集合是否为空
st.clear(); //	集合清空

map

set: 确定性、互异性、有序性
map: 确定性、 互异性、有序性
特点:可携带另一个值

map<key, value> mp;	//初始化
mp.insert();	// 插入元素
mp.eraze();		// 删除元素
mp.count(value);	// 查询是否有键值value
mp.empty();	 // 判断是否为空
mp.clear();  // 清空

multiset
多重集合
multiset 确定性、有序性、可重复
与set的区别在于元素可以重复

multiset<int> mst; //初始化多重集
mst.insert(value); // 插入
mst.eraze(); // 集合删除元素
mst.count(value); // 查询value是否存在
mst.empty(); // 判断是否为空集
mst.clear(); //集合清空

迭代器
遍历
以vector为例

vector<int> V;
vector<int>:: iterator;

for (iterator = V.begin(); iteartor != V.end(); iterator++) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值