一、什么是STL?
STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。
二、STL常用容器
vector动态数组,头文件为 #include <vector>, 能够扩展延伸,以数组的形式存储vector开数组时采用倍增的思想,开始时是开一个一般大小的数组,每次长度不够,长度乘2
#include <vector>
//初始化vector数组
vector <int> a;//初始化一个vector数组a,a为空
vector <int> a(10);// a中有10个元素,值都为0
vector <int> a(10, 2);//a中有10个元素,值都为2
vector <int> a(b);//用b来定义a
vector <string> a(10, "hello");//定义10个值为“hello”的元素
vector <string> a(10, "null"); //定义10个值为null的元素
vector <string> a(b.begin(), b.end()); //a 是 b的复制
//功能
a.push_back(k); //在a 的尾部添加一个数k
a.pop_back();//删除末尾数字
int ans = a.front();//返回a 中的第一个数字
int ans = a.back();//返回a 中的最后一个数字
int s = a.size();//求a 中数字的个数
bool e = a.empty();//返回a 是否为空
a.begin(), a.end()//指 a的第一位和a最后一位
a.clear(); //清空数组a
cout << a[i] << endl;//打印第i个元素
reverse(a.begin(), a.end());//翻转数组a
a.insert(a.begin() + i, k);//在第i个元素的前面插入元素k
a.insert(a.end(), 10, 5);//末尾插入10个值为5的元素
a.erase(a.begin() + 2);//删除第三个元素
a.resize(n, 10);//调整大小,将a变为含有n个10的数组
sort(a.begin(), a.end());//排序
pair
pair<int,string>p;//定义,可以存储两个不同的属性
pair<int, pair<int, string>>p;// 也可以存储三个不同的属性
p = {10, "hello"};//初始化
p.first;//第一个元素
p.second;//第二个元素
string
size()/lenght()//返回字符串长度
empty();clear();//判断是否为空, 清空字符串
string str = “djy”;
str += "kkk"; //可以直接相加一个字符串或一个字符
另外string最关键的功能为a.substr(起始位置,子串长度) 分三种情况,1.输出从第一个数到第二个数的字符串,2.如果第二个数过大,那么输出第一个数到最后(这里第一个数为起始位置,第二个数为字串长度)3.省略第二个数,那么输出第一个数到最后。
queue
queue<int>q;//定义一个int类型的队列q
//队列先进先出的特点
//相关操作
q.push();//向队尾插入一个元素
q.front();//返回队头元素
q.pop();//弹出队头元素
q.back();//返回队尾元素
q.size();//返回元素个数
q.empty();//判断是否为空
queue没有clear()功能,想要清空可以直接q=queue<int> ();
priority_queue优先队列(堆/默认是大根堆)
优先队列:优先级最高的先出队。
队列和排序的完美结合,不仅可以存储数据,还可以将这些数据按照设定的规则进行排序。
每次的push和pop操作,优先队列都会动态调整,把优先级最高的元素放在前面
priority_queue<int> heap;//定义一个优先队列
push()//插入一个数
top()//返回堆顶元素
pop()//弹出堆顶元素
优先队列默认为大根堆,如何变成小根堆(两种方法):
(1) heap. push(-x)
插入一个元素时,插入它的负数
(2) 直接定义成小根锥
priority-queue <int, vector <int>.greater<int> heap;
stack栈
特点:先进后出,只能对栈顶元素进行操作
stack<int> st;//定义一个栈st
q.size();//返回元素个数
q.empty();//判断是否为空
q.push();//向栈顶插入一个元素
q.top();//返回栈顶元素
q.pop();//弹出栈顶元素
deque双端队列
a.push_front(k);//在a的队头添加一个数k
a.push_back(k); //在a的队尾添加一个数k
a.pp_front(k);//删除队头的数字
a.pop_back();//删除队尾数字
int ans = a.front();//返回队头数字
int ans = a.back();//返回队尾数字
int s = a.size();//求a 中数字的个数
bool e = a.empty();//返回a 是否为空
a.clear(); //清空数组a
[]//支持随机存取
begin()/end()//支持迭代器
缺点:慢,效率低