vector應(yīng)用基礎(chǔ):
頭文件:#include<vector>
常用的public類型為iterator、const_iterator、reverse_iterator和const_reverse_iterator迭代器類型,可以直接通過vector<T>::iterator等方式使用
創(chuàng)建vector對(duì)象:以下四個(gè)vector構(gòu)造函數(shù)均可創(chuàng)建一個(gè)vector對(duì)象
(1)vector(const A&a=A())
例如:vector<int> v;
(2)vector(size_type n)
vector<double> v(10);
(3)vector(size_type n,const T&value)
vector<double> v(10,9.3)
(4)vector(const vector&)
vector<char> v1(5,'k');
vector<char> v2(v1);
(5)vector(const inputiterator first,const inputiterator last,const A&a=A())
int arry[]={1,2,3,4,5,6};
vector<int> v(arry,arry+5);
初始化賦值:
vector提供的push_back函數(shù),常用來進(jìn)行初始化容器,push_back在容器的尾端插入新的元素value
元素的遍歷:
迭代器方式的訪問時(shí)使用vector容器提供的iterator類型,定義一個(gè)迭代器變量,例如vector<int>::iterator i; 然后對(duì)迭代器進(jìn)行++操作,將迭代器從一個(gè)元素移動(dòng)到下一個(gè)元素位置,從而通過迭代器的*操作,將所有元素讀取出來
vector提供了begin()和end()函,用于獲取首元素的迭代器和最后一個(gè)元素的下一個(gè)位置的迭代器。
iterator begin();
iterator end();
頭文件:#include<vector>
常用的public類型為iterator、const_iterator、reverse_iterator和const_reverse_iterator迭代器類型,可以直接通過vector<T>::iterator等方式使用
創(chuàng)建vector對(duì)象:以下四個(gè)vector構(gòu)造函數(shù)均可創(chuàng)建一個(gè)vector對(duì)象
(1)vector(const A&a=A())
例如:vector<int> v;
(2)vector(size_type n)
vector<double> v(10);
(3)vector(size_type n,const T&value)
vector<double> v(10,9.3)
(4)vector(const vector&)
vector<char> v1(5,'k');
vector<char> v2(v1);
(5)vector(const inputiterator first,const inputiterator last,const A&a=A())
int arry[]={1,2,3,4,5,6};
vector<int> v(arry,arry+5);
初始化賦值:
vector提供的push_back函數(shù),常用來進(jìn)行初始化容器,push_back在容器的尾端插入新的元素value
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 int main(){
5 vector<int> v;
6 v.push_back(20);
7 v.push_back(10);
8 v.push_back (5);
9 for(int i=0;i<v.size();i++)
10 cout<<"a["<<i<<"]="<<v[i]<<endl;
11 return 0;
12 }
2 #include <vector>
3 using namespace std;
4 int main(){
5 vector<int> v;
6 v.push_back(20);
7 v.push_back(10);
8 v.push_back (5);
9 for(int i=0;i<v.size();i++)
10 cout<<"a["<<i<<"]="<<v[i]<<endl;
11 return 0;
12 }
元素的遍歷:
迭代器方式的訪問時(shí)使用vector容器提供的iterator類型,定義一個(gè)迭代器變量,例如vector<int>::iterator i; 然后對(duì)迭代器進(jìn)行++操作,將迭代器從一個(gè)元素移動(dòng)到下一個(gè)元素位置,從而通過迭代器的*操作,將所有元素讀取出來
vector提供了begin()和end()函,用于獲取首元素的迭代器和最后一個(gè)元素的下一個(gè)位置的迭代器。
iterator begin();
iterator end();
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 int main(){
5 vector<int> v;
6 v.push_back(20);
7 v.push_back(10);
8 v.push_back (5);
9 vector<int>::iterator i,iend;//起始和末尾迭代器
10 iend=v.end();
11 int j;
12 for(i=v.begin(),j=0;i!=iend;i++,j++){
13 cout<<"v["<<j<<"]="<<*i<<endl;//*i為迭代器方式的訪問
14 }
15 return 0;
16 }
2 #include <vector>
3 using namespace std;
4 int main(){
5 vector<int> v;
6 v.push_back(20);
7 v.push_back(10);
8 v.push_back (5);
9 vector<int>::iterator i,iend;//起始和末尾迭代器
10 iend=v.end();
11 int j;
12 for(i=v.begin(),j=0;i!=iend;i++,j++){
13 cout<<"v["<<j<<"]="<<*i<<endl;//*i為迭代器方式的訪問
14 }
15 return 0;
16 }

元素的插入:
不同于在vector容器尾插部添加元素的push_back 函數(shù),insert函數(shù)可在任意位置插入元素,由于插入時(shí)要先將插入位置后的元素后移,以空出一個(gè)位置進(jìn)行插入,因此insert比push_back函數(shù)耗時(shí)。
iterator insert(iterator pos, const T&X);
元素的刪除:
vector容器提供了一個(gè)erase函數(shù),用來刪除迭代器pos所指的元素或者迭代器[first,last)的所有元素,原型如下:
(1)iterator erase(iterator pos);
(2)iterator erase(iterator first,iterator last);
另外一個(gè)刪除元素的函數(shù)是void clear(),它調(diào)用erase函數(shù),將[begin(),end())區(qū)間的所有vector元素全部清除。
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 class MyVector{
7 public:
8 MyVector(char *name,int age){
9 this->name=name;
10 this->age=age;
11 }
12 ~MyVector(){}
13 public:
14 char *name;
15 int age;
16 };
17
18 int main(){
19 MyVector *pDog=new MyVector("dog",1);
20 MyVector *pMonkey=new MyVector("monkey",2);
21 MyVector *pChicken=new MyVector("chicken",3);
22 MyVector *pSnake=new MyVector("snake",4);
23
24 vector<MyVector *>v;
25
26 v.push_back(pDog);
27 v.push_back(pMonkey);
28 v.push_back(pChicken);
29 v.push_back(pSnake);
30
31 v.erase(v.begin()+1);
32 delete pMonkey;
33
34 vector<MyVector*>::iterator i,iend;
35 iend=v.end();
36 for(i=v.begin();i!=iend;i++)
37 cout<<(*i)->name<<' '<<(*i)->age<<endl;
38 //清除所有vector元素
39 v.clear();
40 cout<<"執(zhí)行clear()"<<endl<<"所有vector元素均已全部清除"<<endl;
41 return 0;
42 }
2 #include <vector>
3
4 using namespace std;
5
6 class MyVector{
7 public:
8 MyVector(char *name,int age){
9 this->name=name;
10 this->age=age;
11 }
12 ~MyVector(){}
13 public:
14 char *name;
15 int age;
16 };
17
18 int main(){
19 MyVector *pDog=new MyVector("dog",1);
20 MyVector *pMonkey=new MyVector("monkey",2);
21 MyVector *pChicken=new MyVector("chicken",3);
22 MyVector *pSnake=new MyVector("snake",4);
23
24 vector<MyVector *>v;
25
26 v.push_back(pDog);
27 v.push_back(pMonkey);
28 v.push_back(pChicken);
29 v.push_back(pSnake);
30
31 v.erase(v.begin()+1);
32 delete pMonkey;
33
34 vector<MyVector*>::iterator i,iend;
35 iend=v.end();
36 for(i=v.begin();i!=iend;i++)
37 cout<<(*i)->name<<' '<<(*i)->age<<endl;
38 //清除所有vector元素
39 v.clear();
40 cout<<"執(zhí)行clear()"<<endl<<"所有vector元素均已全部清除"<<endl;
41 return 0;
42 }

元素的反向遍歷:
利用vector提供的反向迭代器reverse_iterator,以及相應(yīng)的rbegin()和rend()函數(shù),可反向遍歷vector容器的元素,rbegin()函數(shù)返回的迭代器指向反向遍歷的首元素,rend函數(shù)返回的迭代器則指向反向遍歷的尾部,原型如下:
(1)reverse_iterator rbegin();
(2)reverse_iterator rend();
vector的交換:
vector利用swap算法,實(shí)現(xiàn)交換兩個(gè)vector容器的swap 成員函數(shù)
原型:void swap(vector &,vector &);
其他常用函數(shù):
bool empty();
判斷vector是否為空 若容器沒有一個(gè)元素則返回true,后則返回false;
size_type size();
當(dāng)前vector容器的實(shí)際元素個(gè)數(shù)
size_type max_size();
系統(tǒng)所允許的vector容器的最大元素個(gè)數(shù)
size_type capacity();
當(dāng)前可容納的vector元素個(gè)數(shù)
reference back()
返回vector容器末元素,要求vector不能為空
void pop_back();
與push_back()函數(shù)相反,pop_back函數(shù)用于刪除末尾的一個(gè)容器元素