C++的基礎知識(四)--vector

    向量 vector 是一種對象實體, 能夠容納許多其他類型相同的元素, 因此又被稱爲容器。屬於STL中的一種自定義的數據類型(可以認爲是數組的增強版)vector 容器與數組相比其優點在於它能夠根據需要隨時自動調整自身的大小以便容下所要放入的元素。此外, vector 也提供了許多的方法來對自身進行操作。在使用它時, 需要包含頭文件 vector, #include<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>>進行輸入, cout<

#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> b(a.begin(),a.begin()+3);這種聲明形式中(a.begin()、a.begin()+3)表示向量起始元素位置到起始元素+3之間的元素位置。(a.begin(),a.end())則表示起始元素和最後一個元素之間的元素位置。
    向量元素的位置便成爲遍歷器, 同時, 向量元素的位置也是一種數據類型, 在向量中遍歷器的類型爲: vector<int>::iterator。遍歷器不但表示元素位置,還可以在容器中前後移動。
    在上例中將元素全部輸出部分的代碼就可以改寫爲: 
    //全部輸出
    vector<int>::iterator t ;
    for(t=a.begin(); t!=a.end(); t++)
        cout<<*t<<" " ;

*t 爲指針的間接訪問形式, 意思是訪問t所指向的元素值。
向量的基本操作:

1>. a.size()                 //獲取向量中的元素個數
2>. a.empty()                //判斷向量是否爲空
3>. a.clear()                //清空向量中的元素
4>. 複製 a = b ;            //將b向量複製到a向量中
5>. 比較保持 ==、!=、>、>=、<、<= 的慣有含義;
     如: a == b ;    //a向量與b向量比較, 相等則返回1
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(b.begin());//將起始位置的元素刪除
        ②、 b.erase(b.begin(), b.begin()+3) ;//將(b.begin(), b.begin()+3)之間的元素刪除
8>. 交換 - swap
       b.swap(a) ;      //a向量與b向量進行交換
 與數組相同, 向量也可以增加維數, 例如聲明一個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;
  }
發佈了36 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章