声明:因为是在acm编程的基础上使用,我就自己总结了一些常用的方法,并不能用来系统的学习stl的vector。
#容器类+函数
#序列性容器(deque list vector)、关联性容器(map set multiset multimap)、容器适配器(queue stack priority_queue)
#在学习这些容器的时候,一定要明白其数据结构的构造,以便于理解在什么情况下使用什么样的容器,以及使用容器如何对数据进行相应的操作。
虽然由多种容器,但函数还是基本相同的,当用的时候根据具体情况来使用相应的容器。
注:当使用容器类的时候,要记得一定要表明类型,如创建vector对象 vector
,
再比如,使用迭代器的时候list
。
a在这里可以代表vector/deque/list任一个容器的对象。
a.push_back(x)
//末尾添加一个元素x
a.pop_back()
//删除末尾的元素
a.front()
//返回首元素的引用
a.back()
//返回尾元素的引用
a.erase(a.begin()+i)
//删除第i个元素
a.erase(a.begin()+i,a.begin()+j)
//删除某一段元素,区间前闭后开 [i,j)
a.clear()
//删除向量中所有元素
a.empty()
//判断a是否为空
a.szie()
//返回a中元素的数目
vector
//创建一个int类型的vector对象,a本身就能做为一个数组的名称
vector
//创建多个int类型的vector对象,相当于创建了十个数组
一个a就是一个vector容器。
代码实例:
#include
#include
#include
#include
using namespace std;
int main(){
vector v;
for(int i=0;i<=10;i++)
v.push_back(i);
//输出
int l=v.size();
for(int i=0;i
deque
//创建一个int型的deque对象
deque
//创建多个int型的deque对象
一个d就是一个队列
d.push_front()
//在d首位添加一个元素
d.pop_front()
//删除d的首位元素
代码实例:
#include
#include
#include
#include
using namespace std;
int main(){
deque d;
for(int i=0;i<10;i++)
d.push_back(i);
//输出
int l=d.size();
for(int i=0;i
deque
(双端队列)具有双端插入删除的性质,而后面降到的queue
(队列)只有在尾部插入,在头部删除,先进先出。
list
//创建一个list对象
list
//创建多个list对象
l.remove(x);
//删除元素中所有元素值等于x的元素
l.sort()
//容器中所有元素排序,默认为升序
l.unique()
//容器内相邻元素若有重复的,则仅保留一个
l.reverse()
//翻转容器中元素的顺序
代码实例:
#include
#include
#include
#include
using namespace std;
int main(){
list l;
for(int i=0;i<=10;i++)
l.push_back(i);
//输出
for(list::iterator it=l.begin();it!=l.end();it++)
cout<<*it<<' ';
}
vector,deque,list都有end()和begin()函数,都可以使用迭代的方法来遍历元素。
a在这里可以代表vector/deque/list任一个容器的对象。
a.empty();
//判空函数,返回值true或者false
a.size();
//返回元素数量
a.push(x)
//在队尾(栈顶)添加元素x
a.pop()
// 容器非空情况下,删除队头(栈顶)元素。
队列:队尾插入,队头删除。
栈:栈顶插入,栈顶删除。
stack
//创建一个栈
stack
//创建多个栈
s.top();
//当栈非空的时候,返回栈顶元素的引用。
#include
#include
#include
#include
#include
#include
using namespace std;
int main(){
stack s;
for(int i=0;i<10;i++)
s.push(i);
//删除并输出
int l=s.size();
for(int i=0;i
queue
//创建一个队列
queue
//创建多个队列
q.front()
//队列非空时,返回队首元素的引用
q.back()
//队列非空时,返回队尾元素的引用
#include
#include
#include
#include
#include
#include
using namespace std;
int main(){
queue p;
for(int i=0;i<10;i++)
p.push(i);
//删除并输出
int l=p.size();
for(int i=0;i
priority_queue
//创建一个优先队列
priority_queue
//创建多个优先队列
p.top();
//优先队列非空的时候,返回优先级最高的元素的引用。
#include
#include
#include
#include
#include
#include
using namespace std;
int main(){
priority_queue p;
for(int i=0;i<10;i++)
p.push(i);
//删除并输出
int l=p.size();
for(int i=0;i
stack和priority_queue的输出操作相似,使用top()取元素。
queue没有top函数,只有front(),back()取两侧元素的操作。
三者都没有end()和begin()函数,所以不能使用迭代来遍历元素。
set、multiset
:集合,set
不允许有重复元素,multiset
允许有重复元素。
map、multimap
:映射,map
中key=>value
一对一的关系,multimap
中key=>value1,value2...
一对多的关系。
四者的函数名都相同,功能上由于集合和映射的性质不同而有所不同。