C++编程必备神器STL——容器篇

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&lt;Elem> c  //一个set,以默认方式排序
set&lt;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)  //以numc替代区间内的所有字符
s.replace(beg,end,nbeg,nend)  //以[nbeg,nend]替代[beg,end]区间内的所有字符
s.empty()  //判断s是否为空
s.length()/size()  //返回字符数量

你可能感兴趣的:(C++,stl,C++,容器)