Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。Vector的方法有如下一些:
应用举例一:
输入数据:含有不多于50个的正整数n(0<=n<=46),输出数:对于每个n计算其第n项fibonacci数,每个结果独占一行。
输入:
6
10
输出:
8
55
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
int i;
int n;
v.push_back(0);
v.push_back(1);
for(i=2; i<=46; i++)
v.push_back(v[i-1]+v[i-2]);
while(cin>>n)
cout<<v[n]<<endl;
return 0;
}
应用举例二:
说明:输入数据 第一行为一个整数m,表示测试用例的个数;接下来有m行,每行表示一个测试用例,每个测试用例为一个十进制数n;
输出数据 十进制整数n对应的二进制数中所有1的位置,在一行输出,最低位的位置为0多个测试用例的结果顺序输出,之间没有空行,整数前不加无效的0。
输入样例 :
2
13
8
输出样例:
0 2 3
3
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
int i,n,data;
while(cin>>n)
{
for(i=0; i<n; i++)
{
v.clear();
cin>>data;
do
{
v.push_back(data%2);
data=data/2;
}
while(data!=0);
for(int j=0; j<v.size(); j++)
{
if(v[j]==1)
cout<<j<<" ";
}
cout<<endl;
}
}
return 0;
}
下面是对结构体数据类型自定义比较函数的方法,可以根据题目排序的要求在Sort中使用不用的自定义比较函数即可。
#include<iostream>
#include<string>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef struct book
{
string name;
int year;
int price;
} STU;
bool comName(const STU &a,const STU &b)
{
if(a.name!=b.name)
return a.name<b.name;
else if(a.year!=b.year)
return a.year<b.year;
else
return a.price<b.price;
}
bool comYear(const STU &a,const STU &b)
{
if(a.year!=b.year)
return a.year<b.year;
else if(a.name!=b.name)
return a.name<b.name;
else
return a.price<b.price;
}
bool comPrice(const STU &a,const STU &b)
{
if(a.price!=b.price)
return a.price<b.price;
else if(a.name!=b.name)
return a.name<b.name;
else
return a.year<b.year;
}
int main()
{
ifstream fin("test.txt");
ofstream fout("output.pc2");
int i,n;
vector<STU> v;
vector<STU>::iterator p;
STU b;
while(fin>>n)
{
v.clear();
if(n==0)
break;
for(i=0; i<n; i++)
{
fin>>b.name>>b.year>>b.price;
v.push_back(b);
}
string comp;
fin>>comp;
if(comp=="Name")
sort(v.begin(),v.end(),comName);
else if(comp=="Year")
sort(v.begin(),v.end(),comYear);
else
sort(v.begin(),v.end(),comPrice);
for(p=v.begin(); p!=v.end(); p++)
{
cout<<(*p).name<<" "<<(*p).year<<" "<<(*p).price<<endl;
}
}
fin.close();
fout.close();
return 0;
}