STL是C++内置的标准模板库,其中内置了很多我们常用的数据结构和算法,如果能在日常编程和竞赛编程中合理使用,将会大大提升我们的编程效率,今天博主就来简单介绍一下我们最常用的STL容器及其内部包含的常用方法
stl容器共通操作
ConstType c //产生一个不含任何元素的容器
ConstType c1(c2) //产生一个同型容器
ConstType c(beg,end) //复制[beg,end]区间的元素,作为容器初值
c.size() //返回容器中元素数量
c.empty() //判断容器是否为空
c.max_size() //返回元素最大可能数量
c1.swap(c2) //交换c1和c2数据
c.begin() //返回一个迭代器,指向第一元素
c.end() //返回一个迭代器,指向最后元素的下一位置
c.rbegin() //返回一个逆向迭代器,指向逆向遍历时的第一个元素
c.rend() //返回一个逆向迭代器,指向逆向遍历时的最后元素的下一位置
c.insert(pos,elem) //将elem的一个副本安插于pos处,返回新元素的位置
c.erase(beg,end) //移除[beg,end]区间内的所有元素
c.clean() //移除所有元素,清空容器
ConstType<xxxxxx>::iterator pos//定义一个迭代器,可以用接受函数返回的迭代器(pos=c.find(3) pos->first是第一个值,pos->second是第二个值)
Vector特殊操作
vector c //产生一个存储Elem类型数据的vector
c.assign(n,elem) //复制n个elem,赋值给c
c.assign(beg,end) //将区间[beg,end]内元素赋值给c
c.front() //返回第一个元素
c.back() //返回最后一个元素
c.insert(pos,n,elem) //在pos处插入n个elem副本
c.insert(pos,beg,end) //在pos处插入[beg,end]区间
c.push_back(elem) //在尾部添加一个elem副本
c.pop_back() //移除最后一个元素
Sets和Multisets
//set和multiset会根据特定的排序准则,自动将元素排序(默认从小到大排序,可用第二个参数进行排序)
//multiset允许元素重复而set不允许重复
set<Elem> c //一个set,以默认方式排序
set<Elem,Op> c //一个set,以Op为排序准则
c.count(elem) //返回元素为elem的元素个数
c.find(elem) //返回元素为elem的第一个元素,如果找不到就返回c.end()
c.lower_bound(elem) //返回elem的第一个可安插位置,也就是元素值>=elem的第一个位置
c.upper_bound(elem) //返回elem的最后一个可安插位置,也就是元素值>elem的第一个位置
c.equal_range(elem) //返回elem的第一个位置和最后一个位置,也就是元素值==elem的元素区间
Maps和Multimaps
//map和multimap将key/value pair当做元素,进行管理,他们可根据key的排序准则自动将元素排序,元素的次序由key决定,默认从小到大排列
//multimap允许重复而map不允许重复
map c //产生一个map,以默认方式排序
map c //产生一个map,以Op为排序准则
c[key] //返回一个reference,指向键值为key的元素,如果尚未存在,就安插该元素
//同set,有count,find,lower_bound,upper_bound,equal_buond
Pair
pairvalue> c(key,value) //构造一个pair,命名为c,对应值为key,value
c.first() //返回第一个值
c.second() //返回第二个值
//可使用make_pair(key ,value)函数构造一个pair
//两个pair进行比较时,第一元素具有较高优先级,只有当第一元素相同时才会比较第二元素,只有两元素均相同时才会被视为相等
Stacks
//LIFO(后进先出) 包含于<stack>头文件
stack st;
st.push() //将一个元素置入stack内
st.top() //返回栈顶元素
st.pop() //移除栈顶元素,不返回栈顶元素
st.size() //返回栈中元素个数
st.empty() //判断栈是否为空
Queues
//FIFO(先进先出) 包含于<queue>头文件
queue Q;
Q.push() //将一个元素置入队列尾端
Q.front() //返回队列首端元素
Q.back() //返回队列尾端元素
Q.pop() //移除队列首端元素
Q.empty() //判断队列是否为空
Q.size() //返回队列中元素个数
Priority Queues
//类似于Queue 包含于头文件会对队列中的元素按照优先级读取,缺省的优先级序列为降序排列(先取出的是最大的)
priority_queue pQ;
pQ.push() //将一个元素置入队列中,并按优先级排列
pQ.top() //返回优先队列中优先级最高的元素
pQ.pop() //移除优先队列中优先级最高的元素
pQ.size() //返回元素数量
pQ.empty() //判断是否为空
String
string s(str) //生成str的一个副本
string s(str,stridx) //将str内始于stridx的部分当做s的初值
string s(str,stridx,strlen) //将str内始于stridx且长度最多为strlen的部分当做s的初值
string s(beg,end) //以区间[beg,end]内的字符串为初值
s.substr(stridx) //返回从stridx开始的子串
s.substr(beg,end) //返回[beg,end]范围内的子串
s.substr(strlen,find(value)) //返回从找到相应char的第一个位置开始且以strlen为长度的子串
s.find() //搜寻第一个与value相等的字符
s.rfind() //搜寻最后一个与value相应的字符(逆向搜索)
s.find_first_of() //搜寻第一个与value中的某值相等的字符
s.find_last_of() //搜寻最后一个与value中某值相等的字符
s.find_first_not_of() //搜寻第一个与value中某值不相等的字符
s.find_last_not_of() //搜寻最后一个与value中某值不相等的字符
s.begin() //指向第一个字符
s.end() //指向最后一个字符
s.append(beg,end) //将区间内所有字符添加于s尾部
s.assign(beg,end) //将区间内所有字符赋值给s
s.insert(pos,c) //在pos处插入字符c,返回新字符的迭代器位置
s.insert(pos,num,c) //在pos处插入num个c,并返回第一个新字符的迭代器位置
s.insert(pos,beg,end) //在pos处插入区间内[beg,end]将区间内所有字符
s.erase(pos)/(beg,end) //删除pos处的字符/删除区间内的字符
s.replace(bag,end,str) //以str代替区间内的所有字符
s.replace(beg,end,num,c) //以num个c替代区间内的所有字符
s.replace(beg,end,nbeg,nend) //以[nbeg,nend]替代[beg,end]区间内的所有字符
s.empty() //判断s是否为空
s.length()/size() //返回字符数量