关于STL里面的容器,我其实用的也不是很顺,不过不可否认,这个太重要了,
先写一篇整理笔记,日后回顾再看看改改
具体资料:http://baike.baidu.com/view/184178.htm?fr=wordsearch
1.vector<T>c
申请一个名称为c的元素种类为T的容器
这里的元素种类除了int之类的基本数据类型,可以是stack、queue等等
比如
vector< queue<int> >card;
还可以看成一个可以自由伸缩的二维数组
如果直接申请G[MAXD][MAXD]可能开不出来数组,
所以可以使用vector<int>G[MAXD];
每次添加数组元素的使用G[i].push(e),就可以;
这一点在图论打临接表的时候十分好用。
2.元素添加
c.push_back()
这个直接在容器尾部添加元素
c.insert(pos,m);
c.insert(pos,n,m);
c.insert(pos,begin,end);
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
using namespace std;
#define MAXD 100 + 10
int main(){
vector<int>v;
vector<int>w;
v.push_back(10);
printf("V:%d,%d,%d\n",v.front(),v.back(),v.size());
v.insert(v.end(),20);
printf("V:%d,%d,%d\n",v.front(),v.back(),v.size());
v.insert(v.begin(),4,5);
printf("V:%d,%d,%d\n",v.front(),v.back(),v.size());
printf("W:%d\n",w.size());
w.insert(w.begin(),v.begin(),v.end());
printf("W:%d,%d,%d\n",w.front(),w.back(),w.size());
}
3.元素的访问
可以直接利用数组形式进行访问,如v[i];
v.front(); 获取首元素
v.back();获取尾元素
4.元素的删除
c.erase(pos) 删除位置为pos的元素
c.erase(begin,end)删除begin ~ end之间的元素
c.clear()清空容器
下面给出一组代码进行vector的说明
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
using namespace std;
#define MAXD 100 + 10
int main(){
vector<int>V;
int n;
printf("输入放入容器元素的个数:");
scanf("%d",&n);
for(int i = 0;i < n;i++){
int t;
scanf("%d",&t);
V.push_back(t);
}
printf("输入插入容器元素的个数:");
scanf("%d",&n);
for(int i = 0;i < n;i++){
printf("分别输入插入位置,插入值:");
int x,y;
scanf("%d%d",&x,&y);
V.insert(V.begin() + x,y);
for(int i = 0;i < V.size();i++)
printf("%d ",V[i]);
printf("\n");
}
}