C++中Vector的用法


Vector功能

1.Vector是一個在C++標准模板庫中的部分內容,它是一個多功能的,能夠操作多種數據結構和算法的模板類和函數庫。

2.是一個能夠存放任意類型的動態數組。 

3.Vector是動態空間,隨着元素的加入,它的內部機制會自行擴充空間以容納新元素。

4.向量長度較長時效率比較低。

序列式容器:Vector,Deque,List

 Vector:將元素置於一個動態數組中加以管理,可以隨機存取元素(用索引直接存取),數組尾部添加或移除元素非常快速。但是在中部或頭部安插元素比較費時;
 Deque:是“double-ended queue”的縮寫,可以隨機存取元素(用索引直接存取),數組頭部和尾部添加或移除元素都非常快速。但是在中部或頭部安插元素比較費時;
 List:雙向鏈表,不提供隨機存取(按順序走到需存取的元素,O(n)),在任何位置上執行插入或刪除動作都非常迅速,內部只需調整一下指針;

基本函數實現

1.構造函數

  • vector():創建一個空vector
  • vector(int nSize):創建一個vector,元素個數為nSize
  • vector(int nSize,const t& t):創建一個vector,元素個數為nSize,且值均為t
  • vector(const vector&):復制構造函數
  • vector(begin,end):復制[begin,end)區間內另一個數組的元素到vector中

2.增加函數

  • void push_back(const T& x):向量尾部增加一個元素X
  • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一個元素x
  • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n個相同的元素x
  • iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一個相同類型向量的[first,last)間的數據

3.刪除函數

  • iterator erase(iterator it):刪除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素
  • void pop_back():刪除向量中最后一個元素
  • void clear():清空向量中所有元素

4.遍歷函數

  • reference at(int pos):返回pos位置元素的引用
  • reference front():返回首元素的引用
  • reference back():返回尾元素的引用
  • iterator begin():返回向量頭指針,指向第一個元素
  • iterator end():返回向量尾指針,指向向量最后一個元素的下一個位置
  • reverse_iterator rbegin():反向迭代器,指向最后一個元素
  • reverse_iterator rend():反向迭代器,指向第一個元素之前的位置

5.判斷函數

  • bool empty() const:判斷向量是否為空,若為空,則向量中無元素

6.大小函數

  • int size() const:返回向量中元素的個數
  • int capacity() const:返回當前向量張紅所能容納的最大元素值
  • int max_size() const:返回最大可允許的vector元素數量值

7.其他函數

  • void swap(vector&):交換兩個同類型向量的數據
  • void assign(int n,const T& x):設置向量中第n個元素的值為x
  • void assign(const_iterator first,const_iterator last):向量中[first,last)中元素設置成當前向量元素

1.push_back 在數組的最后添加一個數據

2.pop_back 去掉數組的最后一個數據

3.at 得到編號位置的數據

4.begin 得到數組頭的指針

5.end 得到數組的最后一個單元+1的指針

6.front 得到數組頭的引用

7.back 得到數組的最后一個單元的引用

8.max_size 得到vector最大可以是多大

9.capacity 當前vector分配的大小

10.size 當前使用數據的大小

11.resize 改變當前使用數據的大小,如果它比當前使用的大,者填充默認值

12.reserve 改變當前vecotr所分配空間的大小

13.erase 刪除指針指向的數據項

14.clear 清空當前的vector

15.rbegin 將vector反轉后的開始指針返回(其實就是原來的end-1)

16.rend 將vector反轉構的結束指針返回(其實就是原來的begin-1)

17.empty 判斷vector是否為空

18.swap 與另一個vector交換數據

應用實例
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

bool compare(int a, int b) {
    return a > b;//升序序列,如果改為a>b,則是降序序列
}
void main() {
    vector<int> obj;//
    for (int i = 0; i < 5; i++) {
        obj.push_back(i);//在向量末尾添加數據
        cout << obj[i] << ",";
    }
    cout <<"容器容量為:"<< obj.size() << endl;

    obj.pop_back();//去掉最后一個元素
    cout << "去掉最后一個元素之后容器容量為:" << obj.size() << endl;

    obj.clear();//清除容器中的數據
    cout << "清除之后容器容量為:" << obj.size() << endl;

    obj.push_back(9);
    obj.push_back(6);
    obj.push_back(88);
    obj.push_back(192);
    obj.push_back(413);
    
    //排序使用sort(int start,int end)方法需要添加#include <algorithm>頭文件
    //從小到大排序
    sort(obj.begin(),obj.end());

    cout << "從小到大排序:" << endl;
    for (int i = 0; i < 5; i++) {
        cout << obj[i] << ",";
    }
    cout << "\n";

    //從大到小排序
    reverse(obj.begin(), obj.end());

    cout << "從大到小排序:" << endl;
    for (int i = 0; i < 5; i++) {
        cout << obj[i] << ",";
    }
    cout << "\n";
    
    //重寫sort方法
    int a[10] = {1,8,6,9,413,722,816,0,2,10};
    sort(a, a + 10, compare);
    cout << "重寫sort之后從大到小排序為:"<< endl;
    for (int i = 0; i < 10; i++) {
        cout << a[i] << ",";
    }
    cout << "\n";
    system("pause");
}
運行結果
0,1,2,3,4,容器容量為:5
去掉最后一個元素之后容器容量為:4
清除之后容器容量為:0
從小到大排序:
6,9,88,192,413,
從大到小排序:
413,192,88,9,6,
重寫sort之后從大到小排序為:
816,722,413,10,9,8,6,2,1,0,
二維數組
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

void main() {

    vector<vector<int> > obj(6, vector<int>(6)); //定義二維動態數組6行6列 

    for (int i = 0; i< obj.size(); i++)//輸出二維動態數組 
    {
        cout << "" << i << "行元素為:" << endl;
        for (int j = 0; j<obj[i].size(); j++)
        {
            cout << obj[i][j] << " ";
        }
        cout << "\n";
    }
    system("pause");
}
運行結果
第0行元素為:
0 0 0 0 0 0
第1行元素為:
0 0 0 0 0 0
第2行元素為:
0 0 0 0 0 0
第3行元素為:
0 0 0 0 0 0
第4行元素為:
0 0 0 0 0 0
第5行元素為:
0 0 0 0 0 0
 
        

 

 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM