C++数据类型——向量

向量(Vectors)
  1.基本操作
      vector是向量类型,她是一种对象实体,具有值,所以可以看作是变量。她可以容纳许多其他类型的相同实体,如若干个整数,所以称其为容器。Vector是C++STL(标准模板类库)的重要一员,使用她时,只要包括头文件#include<vector>即可。
  vector可以有四种定义方式: vector<int>是模板形式,尖括号中为元素类型名,她可以是任何合法的数据类型。 

 

  (1)vector<int> a(10);
//定义了10个整数元素的向量,但并没有给出初值,因此其值是不确定的。
     
  (2)vector<int> b(10,1);
//定义了10个整数元素的向量,且给出每个元素的初值为1。这种形式是数组望尘莫及的,
//数组只能通过循环来成批的赋给相同初值。

   
  (3)vector<int> c(b);
//用另一个现成的向量来创建一个向量。
   
  (4)vector<int> d(b.begin(),b.begin()+3);
//定义了其值依次为b向量中第0到第2个(共3个)元素的向量。
 


      因此,创建向量时,不但可以整体向量复制性赋值,还可以选择其他容器的部分元素来定义向量和赋值。特别的,向量还可以从数组获得初值。例如:
      int a[8]={2007,9,24,2008,10,14,10,5};
      vector<int> va(a,a+8);
      上面第(4)种形式的b.begin() 、b.end()是表示向量的起始元素位置和最后一个元素之外的元素位置。
      向量元素位置也属于一种类型,称为遍历器。遍历器不单表示元素位置,还可以在容器中前后挪动。每种容器都有对应的遍历器。向量中的遍历器类型为:
      vector<int>::iterator
因此要输入向量中所有元素,可以有两种循环控制方式:
      for(int i=0; i<a.size(); ++i)  //第一种方法
           cout<<a[i]<<" ";
 
      for(vector<int>::iterator it=a.begin(); it!=a.end(); ++it)  //第二种方法
           cout<<*it<<" ";
第一种方法是下标方式,a[i]是向量元素操作,这种形式和数组一样;
第二种方法是遍历器方式,*it是指针间访形式,它的意义是it所指向的元素值。
      a.size()是向量中元素的个数,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向量的最后一个元素
a.push_back(5);                             //在a向量最后插入一个元素,其值为5
a.resize(10);                        //将向量元素个数调至10个。多则删,少则补,其值随机
a.resize(10,2);                    //将向量元素个数调至10个。多则删,少则补,其值为2
if(a=b) cout<<"epual";    //向量的比较操作还有 !=, <, <=, >, >=

      除此之外,还有元素的插入与删除、保留元素个数、容量观察等操作。

      向量是编程中使用频率最高的数据类型。这不仅因为数据的顺序排列性在生活中最常见,还因为向量中有一些插入、删除、搜索、判空等最简单的常规操作。当数据并不复杂时,可以代替其他数据类型而很好的工作。特别是向量可以自动伸展,容量可以自动增大,这对一些不确定数据量的容器工作带来了极大的方便。

      例:元素赋值

问题描述:

      读入一个文件data.txt 的数据到向量中,文件中为一些整数(不知个数的情况)。要判断向量中的元素有多少个两两相等的数对.

示范程序:     

#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int main()
{
  ifstream in(
"data.txt");//yuexingtian.txt文件必须要和此程序放在同一个文件夹下
 
vector<int> s;
 
for(int a; in>>a;)//将yuexingtian.txt的数据全都读入a中
   
s.push_back(a);//在s向量最后插入元素a的值
 
int pair=0;
 
for(int i=0;i<s.size()-1;++i)//比较是否有相等的数的for循环
 
for(int j=i+1;j<s.size();++j)
   
if(s[i]==s[j]) pair++;
  cout<<pair<<endl;
}

 

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值