使用一些便捷的工具可以大大地提高效率,避免重复地造轮子,我到现在还忘不了第一次考CCF的时候,不知道怎么用STL的工具,一道简单的约瑟夫环的问题,用队列可以轻松解决,我用数组写了好长的代码,所以这里把STL中的使用方法记录一下
VECTOR
vector是一个类似于数组的结构,但是数组需要给它指定长度,有一些还要初始化,比如我们要使用memset()函数对数组内容进行初始,vector相对于数组来说就会更方便一点。
首先如果我们要使用vector工具的话,要包含其对应的头文件
#include <vector>
其次这里不会深挖其底层的实现原理,只是记录一下使用方法
1.向vector中加入元素:push_back(),将数据加入到vector的尾部
2.删除尾部元素:pop_back()
3.删除某一元素:erase(pos)
4.清空:clear()
5.某位置插入元素:insert(pos,n)
6.构造方法:vector<数据类型> 名称
set
set也可以看做一个数组,不同的是set中的数据都是有序且唯一的,也就是如果我们向set中插入一个原来已经存在的元素,set的size是不会变的
因为是有序的,所以调用插入方法insert的时候不需要指明位置,也没有必要,只有一个参数是待插入的元素
set<int> s 定义一个set容器 类型为int型
s.begin() 返回指向第一个元素的迭代器
s.clear() 清除所有元素
s.count() 返回bool型,有返回1,无返回0
s.empty() 如果集合为空,返回true
s.end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
s.erase() 删除集合中的元素
s.find() 返回一个指向被查找到元素的迭代器,如果没找到则返回end()
s.insert() 在集合中插入元素
s.size() 集合中元素的数目
s.swap() 交换两个集合变量
list
链表,这里的list是双向链表,如果使用单向链表需要使用forward_list,不需要太多解释了,构造方法:
list<数据类型>list名,可附带长度
方法如下:
push_back(),从尾部插入
push_front(),从头部插入
empty(),为空返回true
front(),获得头部元素
back(),获得尾部元素
pop_back(),不为空的前提下删掉尾部元素
pop_front(),不为空的前提下删掉头部元素
assign(),将list中元素统一替换
swap(),链表的交换
reverse(),链表逆置
merge(),a.merge(b),效果=链表中的元素,先放置所有的b中元素,再放置所有的a中元素
insert(pos,n),指定位置插入指定元素
remove(),删除指定元素
map
提供键-值方式的结构,构造时一般采用map<key,value> name,这样的方式,其中的key和value是需要指明的数据类型而不是对象,具体使用方法:
insert(pair<key类型,value类型>(待插入key,待插入value))
count(key),查找得到返回1,查找不到返回0
find(key),查找不到的情况返回map.end(),first()对象是key,second是value
map.clear(),清空
map.erase(),删除某一对,这里使用迭代器比较好
queue
队列,数据先进先出性质,具体方法:
push(),将某元素入队,进入队列尾部
pop(),出队,队首元素出队,
q.front(),获取到队首元素,
q.back(),获取到队尾元素
empty(),为空返回true
q.size(),返回队列中元素数
stack
栈,数据具有先进后出的性质,具体方法:
构造方法:stack<数据类型> name
push(n),元素入栈
pop(),弹出栈顶元素
top(),获取栈顶元素
empty(),判断是否为空,为空返回true
最近准备考试,所以这篇权做复习使用,可能写的稍微粗糙了一点,日后有机会再加完善