vector的用法


vector相當於一個動態的數組,當程序員無法知道自己需要的數組的規模多大時,

用其來解決問題可以達到最大節約空間的目的.

就是常數很大,但要是開了O2,一切都不是問題。
就像數組一樣,vector也采用的連續存儲空間來存儲元素。
也就是意味着可以采用下標對vector的元素進行訪問,和數組一樣高效。
但是又不像數組,它的大小是可以動態改變的,而且它的大小會被容器自動處理。

但是對於編程來講,我們只會用就可以了。

NEXT,用法奉上。

1.vector的元素不僅僅可以是int,double,string,還可以是結構體,但是要注意:結構體要定義為全局的,否則會出錯。

2.當然,要有頭文件#include<vector>

3.我們以vector<int>a;為例

基本上包含了vector的常用函數(不夠再補)

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 #define DB double
 4 using namespace std;
 5 const int tmp=100;
 6 vector<int>a;//創建vector對象
 7 vector<int>b(6,9);
 8 /*vector的聲明及初始化 
 9 vector<int> a;        //聲明一個int型向量
10 vector<int> a(5);     //聲明一個初始大小為5的int向量
11 vector<int> a(10, 1); //聲明一個初始大小為10且值都是1的向量
12 vector<int> a(tmp);   //聲明並用tmp向量初始化vec向量
13 vector<int> tmp(a.begin(), a.begin() + 3);  //用向量vec的第0個到第2個值初始化tmp
14 int arr[5] = {1, 2, 3, 4, 5};   //下標依舊是從0開始 
15 vector<int> a(arr, arr+ 5);      //將arr數組的元素用於初始化vec向量
16 //說明:當然不包括arr[4]元素,末尾指針都是指結束元素的下一個元素,
17 //這個主要是為了和vec.end()指針統一。
18 vector<int> vec(&arr[1], &arr[4]); //將arr[1]~arr[4]范圍內的元素作為vec的初始值
19 */ 
20 int main()
21 {
22     for(int i=11;i<=20;++i) a.push_back(i);//尾部插入數字,下標從0開始 
23     cout<<a.front()<<endl;//傳回第一個數據 
24     cout<<a.back()<<endl;//傳回最后一個數據
25     cout<<a.capacity()<<endl;//返回容器當前能夠容納的元素數量
26     cout<<a.size()<<endl;//返回當前容器中實際的元素個數
27     cout<<a.empty()<<endl;//判斷容器是否為空,空是1,非空是0
28     cout<<a.max_size()<<endl;//返回容器可以存儲的最多元素數目 
29     for(int i=0;i<a.size();++i) cout<<a.at(i)<<" ";cout<<endl;//a.at(i)得到編號位置的數據
30     /*****************************************************************************************/
31    /* lower_bound(a.begin(),a.end(),x) 返回>=x的第一個數的下標(指針)
32       upper_bound(a.begin(),a.end(),x) 返回>=x的第一個數的下標(指針)
33   *************************************************************************************************/
34     for(int i=1;i<=10;++i) cout<<a[i-1]<<" ";cout<<endl;//使用下標訪問元素 
35     std::vector<int>::iterator it;
36     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;//使用迭代器訪問元素 
37     /*a.begin()           返回指向容器第一個元素的迭代器
38     a.end()             返回指向容器最后一個元素的迭代器*/
39     /******************************************************************************************/
40     a.insert(a.begin()+4,211);//a.insert(a.begin()+i,a);在第i個元素后面插入a;傳回新數據位置的迭代器 
41     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
42     a.insert(a.begin()+5,3,985);
43     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
44     /****************************************************************************************/
45     a.erase(a.begin()+4);//a.erase(a.begin()+i);刪除第i+1個元素;傳回下一個數據的位置的迭代器 
46     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
47     a.erase(a.begin()+1,a.begin()+4);//a.erase(a.begin()+i,a.end()+j);刪除區間[i,j-1];區間從0開始;傳回下一個數據的位置的迭代器 
48     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
49     /***********************************************************************************************/
50     a.pop_back();//刪除最后一個數據
51     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
52     vector<int>::reverse_iterator p;
53     for(p=a.rbegin();p!=a.rend();++p) cout<<*p<<" ";cout<<endl;
54     /*a.rbegin() 傳回一個逆向的第一個數據的迭代器 
55     a.rend() 傳回一個逆向的最后一個數據的下一個位置的迭代器 */
56     /**************************************************************************************************/
57     a.resize(6);//重新指定隊列的長度,即只剩前六個元素,剩下的元素都刪除了 
58     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
59     a.reserve(100);//增加隊列容量,就是reserve增加的空間未被初始化不能引用
60     cout<<a.size()<<endl;
61     /***********************************************************************************************/
62     swap(a[3],a[0]);//交換隊列中的兩個元素 
63     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
64     a.clear(); cout<<a.size()<<endl;//a.clear();清除a中的內容 
65     a.swap(b);//交換a,b,兩個向量的內容 
66     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
67     cout<<b.size();
68     return 0;
69 }

 


免責聲明!

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



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