C++ STL victor


一.介紹

  1. vector是表示可變大小數組的序列容器。
  2. 就像數組一樣,vector也采用的連續存儲空間來存儲元素。也就是意味着可以采用下標對vector的元素進行訪問,和數組一樣高效。但是又不像數組,它的大小是可以動態改變的,而且它的大小會被容器自動處理。
  3. 本質講,vector使用動態分配數組來存儲它的元素。當新元素插入時候,這個數組需要被重新分配大小為了增加存儲空間。其做法是,分配一個新的數組,然后將全部元素移到這個數組。就時間而言,這是一個相對代價高的任務,因為每當一個新的元素加入到容器的時候,vector並不會每次都重新分配大小。
  4. vector分配空間策略:vector會分配一些額外的空間以適應可能的增長,因為存儲空間比實際需要的存儲空間更大。不同的庫采用不同的策略權衡空間的使用和重新分配。但是無論如何,重新分配都應該是對數增長的間隔大小,以至於在末尾插入一個元素的時候是在常數時間的復雜度完成的。
  5. 因此,vector占用了更多的存儲空間,為了獲得管理存儲空間的能力,並且以一種有效的方式動態增長。與其它動態序列容器相比(deques, lists and forward_lists), vector在訪問元素的時候更加高效,在末尾添加和刪除元素相對高效。對於其它不在末尾的刪除和插入操作,效率更低。比起lists和forward_lists統一的迭代器和引用更好。

二.用法:

  1.頭文件

#include <vector> 

  2.定義方式

a) vector<int>v1;//vector元素為 int 型  
b) vector<string>v2;// vector元素為string型  
c) vector<node>v3;//入隊元素為結構體型,結構體可以自行定義

vector<int>::iterator it;//定義一個迭代器

  3.常用操作

 1 v1.push_back()   //在數組的最后添加一個數據
 2 v1.pop_back()    //去掉數組的最后一個數據 
 3 v1.front()     //返回第一個元素(棧頂元素)
 4 v1.begin()           //得到數組頭的指針,用迭代器接受
 5 v1.end()             //得到數組的最后一個單元+1的指針,用迭代器接受
 6 v1.clear()        // 移除容器中所有數據
 7 v1.empty()         //判斷容器是否為空
 8 v1.erase(pos)        //刪除pos位置的數據
 9 v1.erase(beg,end)// 刪除[beg,end)區間的數據
10 v1.size()         //回容器中實際數據的個數
11 v1.insert(pos,data) //在pos處插入數據

 

三.例子

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <vector>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     vector <int> v;                            //定義vector
 9     vector<int>::iterator it;                 //定義一個vector迭代器
10     for(int i = 10; i >= 1; i--)              //插入數據
11         v.push_back(i);
12     cout<<"輸出:";
13     for(it=v.begin();it!=v.end();it++)       //輸出迭代器的值
14         cout<<*it<<" ";
15     cout<<endl;
16     it-=1;
17     cout<<"最后一個的值為:"<<*it<<"     "<<endl;
18     v.erase(it);                             //刪除最后一個元素
19     cout <<"元素個數:" <<v.size() << endl;    //輸出元素個數
20     sort(v.begin(), v.end());                    //vector排序
21     cout<<"排序后:";
22     for(it=v.begin();it!=v.end();it++)            //輸出vector元素
23         cout << *it << " ";
24     cout<<endl;
25     v.insert(v.begin(),100) ;                 //在pos位置插入一個elem
26     cout<<"第一個元素為:" <<v.front()<<endl;//輸出第一個元素
27     v.pop_back();                         //去掉最后一個元素
28     cout << "元素個數:" <<v.size() << endl;//輸出元素個數
29     v.clear();                                //vector清空
30     cout <<"清空后元素個數:" << v.size() << endl;    //輸出元素個數
31     return 0;
32 }

 

摘自愛國師哥的博客

這位大佬寫的更詳細一點

 


免責聲明!

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



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