向量(vectors)
Vector是向量类型,是一种对象实体,使用它时,只要加上头文件<vector>即可。
Vector可以有四种定义方式:
(1)vector<int> a(10);
(2)Vector<int>b(10,1);
(3)Vector<int>c(b);
(4)Vector<int>d(b.begin(),b.begin()+3)
Vector<int>是模板形式,其中尖括号内可以是任何合法的数据类型,在此表示一个整数向量,
(1)定义了十个整数元素的向量,但没有给出初值,所以其值是不确定的
(2)定义了十个整数元素的向量,且每个元素初值是1,和明显这种定义方式远远优于数组
(3)是用另一个现成的向量来创建一个向量
(4)定义了其值依次为b向量的第0个到第2个(共3个)元素的向量
因此,向量可以选择另一个向量的一部分进行复制。
特别的,向量还可以从数组获得初值,例如:
int a[7]={1,2,3,4,5,6,7};
Vector<int> va(a,a+7);
上面第四种形式的b.begin()和b.end()表示向量起始元素的位置和最后一个向量元素之外的位置,向量元素位置也属于一种类型,称为遍历器,遍历器不单表示元素位置,还可以在容器中前后挪动。每种容器都有对应的遍历器,向量的遍历器类型为vector<int>::iterator。
因此,输出向量的元素有两种方式,
for(int i=0;i<a.size;i++) 第一种
cout<<a[i]<<” ”;
for(vector<int> it=a.begin();it!=a.end();it++) 第二种
cout<<*it<<” ”;
a.begin()表示向量的第一个元素,这种方式称为一个对象捆绑一个函数调用,表示对该对象进行某种操作,类似这样的使用方式称为调用对象a的成员函数,这种方式在对象程序设计中很普遍,向量中的操作都是通过成员函数完成的。
它的常用操作有
a.assign(b.begin(),b.begin()+3); //将向量b的0-2元素构成向量赋值给a
a.assign(4,2); //使a向量只含0-3元素,且均赋值2
Int x=a.back(); //将向量a的最后一个元素赋值给整数x
a.clear(); //将向量a清空
If(a.empty())cout<<”empty”; //a.empty()常用作判断条件,它判断向量空否
int y=a.front(); //将a的第一个元素赋值给y
a.pop_back(); //删除最后一个元素
a.push_back(10); //在向量最后插入一个元素,其值为10
a.resize(10); //将向量元素调至10个元素,多则删,少则补,其值不确定
a.resize(10,2); //将向量元素调至10个,多则删,少则补,其值为2
if(a==b)cout<<”equal”; //向量可以比较,!=,<等。
//========================================================
//判断yy.txt中有多少对两两相等的整数(yy.txt中有若干个整数)
//========================================================
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream in("yy.txt");
vector<int> v;
for(int a;in>>a;)
v.push_back(a);
int pair=0;
for(int i=0;i<v.size()-1;i++)
for(int j=i+1;j<v.size();j++)
if(v[i]==v[j])
pair++;
cout<<pair<<endl;
}