程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中的Vector(向量)的介紹

C++中的Vector(向量)的介紹

編輯:關於C++

一、Vector(向量)

vector(向量)是一種對象實體,能夠容納許多其他類型相同的元素, 因此又被稱為容器。

與string相同,vector同屬於STL(Standard Template Library, 標准模板庫)中的一種自定義的數據類型,可以廣義上認為是數組的增強版。

在使用它時, 需要包含頭文件 vector

#include <vector>

vector 容器與數組相比其優點在於它能夠根據需要隨時自動調整自身的大小以便容下所要放入的元素。此外,vector也提供了許多的方法來對自身進行操作。

二、Vector的聲明及初始化

vector<int> a;          //聲明一個int型向量a

vector<int> a(10);      //聲明一個初始大小為10的向量

vector<int> a(10, 1);   //聲明一個初始大小為10且初始值都為1的向量

vector<int> b(a);       //聲明並用向量a初始化向量b

vector<int> b(a.begin(), a.begin()+3);      //將a向量中從第0個到第2個(共3個)作為向量b的初始值

除此之外, 還可以直接使用數組來初始化向量:

int n[] = {1, 2, 3, 4, 5};

vector<int> a(n, n+5);          //將數組n的前5個元素作為向量a的初值

vector<int> a(&n[1], &n[4]);    //將n[1]-n[4]范圍內的元素作為向量a的初值

三、元素的輸入及訪問

-> 使用下表訪問元素

元素的輸入和訪問可以像操作普通的數組那樣
輸入:

cin>>a[n];

輸出:

cout<<a[n];

示例:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> a(10, 0);//大小為10初值為0的向量a

    //對其中部分元素進行輸入
    cin >> a[2];
    cin >> a[5];
    cin >> a[6];

    //全部輸出
    int i ;
    for(i=0; i<a.size(); i++)
        cout << a[i] << " ";

    return 0 ;
}

-> 使用迭代器訪問元素

在上例中,將元素全部輸出部分的代碼可以改寫為:

//全部輸出
vector<int>::interator t;
for(t = a.begin(); t != a.end(); t++)
    cout<< *t << " ";

*t為指針的間接訪問形式,意思是訪問t所指向的元素值。

四、Vector的基本操作

1>  a.size()        //獲取向量中的元素個數

2>  a.empty()       //判斷向量是否為空

3>  a.clear()       //清空向量中的元素

4>  a = b ;         //將b向量復制到a向量中

5>  比較 - 保持 ==、!=、>、>=、<、<= 的慣有含義。

6>  插入 - insert

    ① a.insert(a.begin(), 1000);
    //將1000插入到向量a的起始位置前

    ② a.insert(a.begin(), 3, 1000);     //將1000分別插入到向量元素位置的0-2處(共3個元素)

    ③ vector<int> a(5, 1);
       vector<int> b(10);
       b.insert(b.begin(), a.begin(), a.end());      //將a.begin(),a.end()之間的全部元素插入到b.begin()前

7>  刪除 - erase

    ① b.erase(vec.begin()+2);                 //刪除第3個元素

    ② vec.erase(vec.begin()+i,vec.end()+j);   //刪除區間[i,j-1]

8>  交換 - swap

    b.swap(a) ;            //a向量與b向量進行交換

五、二維Vector

與數組相同,向量也可以增加維數,例如聲明一個m*n大小的二維向量方式可以像如下形式:

vector< vector<int> > b(10, vector<int>(5));        //創建一個10*5的int型二維向量

在這裡,實際上創建的是一個向量中元素為向量的向量。同樣可以根據一維向量的相關特性對二維向量進行操作。
例:

#include <iostream>
#include <vector>
using namespace std ;
int main()
{
    vector< vector<int> > b(10, vector<int>(5, 0)) ;

    //對部分數據進行輸入
    cin>>b[1][1];
    cin>>b[2][2];
    cin>>b[3][3];

    //全部輸出
    int m, n;
    for(m=0; m<b.size(); m++)         //b.size()獲取行向量的大小
    {
        for(n=0; n<b[m].size(); n++)  //獲取向量中具體每個向量的大小
            cout<<b[m][n]<<" " ;
        cout<<"\n" ;
    }

    return 0;
}

六、結構體Vector

Vector的元素不僅僅可以是int,double,string,還可以是結構體,但是要注意:結構體要定義為全局的,否則會出錯。 下面是一段簡短的程序代碼:

#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

typedef struct rect
{
    int id;
    int length;
    int width;

  //對於向量元素是結構體的,可在結構體內部定義比較函數,下面按照id,length,width升序排序。
  bool operator< (const rect &a)  const
    {
        if(id!=a.id)
            return id<a.id;
        else
        {
            if(length!=a.length)
                return length<a.length;
            else
                return width<a.width;
        }
    }
}Rect;

int main()
{
    vector<Rect> vec;
    Rect rect;
    rect.id=1;
    rect.length=2;
    rect.width=3;
    vec.push_back(rect);
    vector<Rect>::iterator it=vec.begin();
    cout << (*it).id << ' ' << (*it).length << ' ' << (*it).width << endl;    

    return 0;
}

七、算法

1、 使用reverse將元素翻轉:
需要頭文件#include

reverse(vec.begin(),vec.end());         //將元素翻轉

2、使用sort排序:
需要頭文件#include

sort(vec.begin(),vec.end());            //默認是按升序排列,即從小到大

可以通過重寫排序比較函數按照降序排序,如下:

定義排序比較函數:

bool Comp(const int &a,const int &b)
{
    return a>b;
}

調用時:

sort(vec.begin(),vec.end(),Comp)        //降序排序。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved