1;vector动态数组;
定义;vector<int> a; vector<double> a; vector<string> a;都可以的;
还可以用来当做二维数组;vectora[100];表示二维数组a;一维固定二维动态;
1.1;基本操作;
a.size();读取大小; a.resize();改变大小(于删除类似);a.resize(h+1);保留0到h的元素;
a.push_back();向尾部添加元素; a.push_back(b);
a.pop_back();删除最后一个元素;
insert();插入;insert(v.begin(),3);在第一个迭代器前面插入3;
insert(v.end() , 3);在最后一个迭代器位置插入3;
a.clear();清空动态数组;
a.erase();删除迭代器中的一个或者一段位置的所有元素;
1.2;迭代器;利用迭代器来遍历vector;
vector<int>::iterator it;//相同类型;
for(it = v.begin; it != v.end; it++)
cout << *it << “ ”;//要*it;
1.3;查找;find;
vector<int>::iterator result = find(v.begin,v.end , 3);返回3的迭代器位置;
if(result != v.end)cout << “find it”;
1.4;voctor的sort排序;
vector<string>vstr;
string str;
bool MyComp(const string &s1,const string &s2)
{
int c1=count(s1.begin(),s1.end(),'1');
int c2=count(s2.begin(),s2.end(),'1');
return c1!=c2?c1<c2:s1<s2;
}
sort(vstr.begin(),vstr.end(),MyComp);
for(vector<string>::iterator it=vstr.begin();it<vstr.end();it++)
{
cout<<*it<<endl;
}
1.5;反向排列向量的从首到尾间的元素 reverse(v.begin(),v.end());
看题目;
hdu——4858项目管理;
http://acm.hdu.edu.cn/showproblem.php?pid=4858
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
vector<int>p[100005];//相当于二维数组。一维固定
int main()
{
int t, b, i,a,d,s,n,dd,bb,c;
int cen[100005];
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&dd,&bb);
for(i = 0; i <= dd;i++)
p[i].clear();//二维数组要注意清空
for(i = 0; i < bb; i++)
{
scanf("%d %d",&a,&b);
p[a].push_back(b);//vector这个二维数组的作用;每个数组表示与自己联通的元素;
p[b].push_back(a);
}
scanf("%d",&n);
memset(cen,0,sizeof(cen));//该数组的作用;记录每个点的权值;
int u,v;
while(n--)
{
scanf("%d",&c);
if(c==0)
{
scanf("%d %d",&u,&v);
cen[u] += v;
}
if(c==1)
{
s = 0;
scanf("%d",&u);
for(i = 0; i < p[u].size();i++)//循环将所有与u连通的点的权值;
{
s += cen[p[u][i]];
}
printf("%d\n",s);
}
}
}
return 0;
}