1. 程式人生 > >C++標準模板庫vector介紹

C++標準模板庫vector介紹


版權宣告:本文為博主原創文章,轉載請註明出處。 個人部落格地址:https://yangyuanlin.club 歡迎來踩~~~~


介紹

  • Vector
    Vectors 包含著一系列連續儲存的元素,其行為和陣列類似。訪問Vector中的任意元素或從末尾新增元素都可以在常量級時間複雜度內完成,而查詢特定值的元素所處的位置或是在Vector中插入元素則是線性時間複雜度。

(1)vector是表示可變大小陣列的序列容器。

(2)就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。

(3)本質講,vector使用動態分配陣列來儲存它的元素。當新元素插入時候,這個陣列需要被重新分配大小為了增加儲存空間。其做法是,分配一個新的陣列,然後將全部元素移到這個陣列。就時間而言,這是一個相對代價高的任務,因為每當一個新的元素加入到容器的時候,vector並不會每次都重新分配大小。

(4)vector分配空間策略:vector會分配一些額外的空間以適應可能的增長,因為儲存空間比實際需要的儲存空間更大。不同的庫採用不同的策略權衡空間的使用和重新分配。但是無論如何,重新分配都應該是對數增長的間隔大小,以至於在末尾插入一個元素的時候是在常數時間的複雜度完成的。

(5)因此,vector佔用了更多的儲存空間,為了獲得管理儲存空間的能力,並且以一種有效的方式動態增長。與其它動態序列容器相比(deques, lists and forward_lists), vector在訪問元素的時候更加高效,在末尾新增和刪除元素相對高效。對於其它不在末尾的刪除和插入操作,效率更低。比起lists和forward_lists統一的迭代器和引用更好。

用法

標頭檔案

#include <vector> 

定義方式

vector<int> v1; // vector元素為 int 型別  
vector<string> v2; // vector元素為 string 型別  
vector<node> v3; // vector元素為結構體型,結構體可以自行定義
vector<int>::iterator it; // 用迭代器方式進行遍歷

常用操作

Constructors // 建構函式 
Operators // 對vector進行賦值或比較 
assign() // 對Vector中的元素賦值 
at() // 返回指定位置的元素 
back() // 返回最末一個元素 
begin() // 返回第一個元素的迭代器 
capacity() // 返回vector所能容納的元素數量(在不重新分配記憶體的情況下) 
clear() // 清空所有元素 
empty() // 判斷Vector是否為空(返回true時為空) 
end() // 返回最末元素的迭代器(譯註:實指向最末元素的下一個位置) 
erase() // 刪除指定元素 
front() // 返回第一個元素 
get_allocator() // 返回vector的記憶體分配器 
insert() // 插入元素到Vector中 
max_size() // 返回Vector所能容納元素的最大數量(上限) 
pop_back() // 移除最後一個元素 
push_back() // 在Vector最後新增一個元素 
rbegin() // 返回Vector尾部的逆迭代器 
rend() // 返回Vector起始的逆迭代器 
reserve() // 設定Vector最小的元素容納數量 
resize() // 改變Vector元素數量的大小 
size() // 返回Vector元素數量的大小 
swap() // 交換兩個Vector 

舉個栗子

  • 程式碼
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
 vector <int> v;                            //定義vector
 vector<int>::iterator it;                 //定義一個vector迭代器
 for(int i = 10; i >= 1; i--)              //插入資料
 v.push_back(i);
 cout<<"輸出:";
 for(it=v.begin();it!=v.end();it++)       //輸出迭代器的值
 cout<<*it<<" ";
 cout<<endl;
 it-=1;
 cout<<"最後一個的值為:"<<*it<<"     "<<endl;
 v.erase(it);                             //刪除最後一個元素
 cout <<"元素個數:" <<v.size() << endl;    //輸出元素個數
 sort(v.begin(), v.end());                    //vector排序
 cout<<"排序後:";
 for(it=v.begin();it!=v.end();it++)            //輸出vector元素
 cout << *it << " ";
 cout<<endl;
 v.insert(v.begin(),100) ;                 //在pos位置插入一個elem
 cout<<"第一個元素為:" <<v.front()<<endl;//輸出第一個元素
 v.pop_back();                         //去掉最後一個元素
 cout << "元素個數:" <<v.size() << endl;//輸出元素個數
 v.clear();                                //vector清空
 cout <<"清空後元素個數:" << v.size() << endl;    //輸出元素個數
 return 0;
}
  • 執行結果
  • 以上。

版權宣告:本文為博主原創文章,轉載請註明出處。 個人部落格地址:https://yangyuanlin.club 歡迎來踩~~~~