C++標準模板庫vector介紹
阿新 • • 發佈:2018-11-26
版權宣告:本文為博主原創文章,轉載請註明出處。 個人部落格地址: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 歡迎來踩~~~~