版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/fuxingdecsdn/article/details/80411649
vetctor的定義
//第一種:不傳參數
vector<int> vint;
vector<char> vchar;
vector<string> vstring;
//第二種:傳一個參數 相當於開辟了一個數組
vector<int> vint2(5);
vector<char> vchar2(5);
vector<string> vstring2(5);
//第三種:參數一 n個元素,每個元素的初值 開辟數組並進行初始化
vector<int> vint3(5,0);
vector<char> vchar3(5,'a');
vector<string> vstring3(5,"a");
//第四種:傳一段迭代器區間
vector<int> vint4(vint3.begin(),vint3.end());
vector<char> vchar4(vchar3.begin(),vchar3.end());
vector<string> vstring4(vstring3.begin(),vstring3.end());
//第五種:傳一個對象,既拷貝函數
vector<int> vint5(vint3);
vector<char> vchar5(vchar3);
vector<string> vstring5(vstring3);
//第六種:賦值運算符的重載
vector<int> vint6;
vector<char> vchar6;
vector<string> vstring6;
vint6=vint5;
vchar6=vchar5;
vstring6=vstring5;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
vector迭代器定義
//迭代器定義
//begin() end() rbegin() rend() 正向和反向迭代器
std::vector<int>::iterator itint=vint6.begin();
std::vector<char>::iterator itchar=vchar6.begin();
std::vector<string>::iterator itstring=vstring.end();
itint =vint6.end();
itchar = vchar.end();
itstring=vstring.end();
std::vector<int>::reverse_iterator ritint =vint6.rbegin();
std::vector<char>::reverse_iterator ritchar = vchar.rbegin();
std::vector<string>::reverse_iterator ritstring=vstring.rbegin();
ritint = vint6.rend();
ritchar = vchar6.rend();
ritstring=vstring.rend();
//cbegin() cend() crbegin() crend() const正向和反向迭代器
std::vector<int>::const_iterator citint=vint6.cbegin();
std::vector<char>::const_iterator citchar=vchar6.cbegin();
std::vector<string>::const_iterator citstring=vstring6.cbegin();
citint=vint6.cend();
citchar=vchar6.cend();
citstring=vstring.cend();
std::vector<int>::const_reverse_iterator critint;
std::vector<char>::const_reverse_iterator critchar;
std::vector<string>::const_reverse_iterator critstring;
critint=vint6.crbegin();
critchar=vchar6.crbegin();
critstring=vstring6.crbegin();
critint=vint6.crend();
critchar=vchar6.crend();
critstring=vstring6.crend();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vector的大小
//用來描述大小的一系列函數
vector<int> test(5,1);
cout<<test.size()<<endl;//表示順序表的元素個數
cout<<test.capacity()<<endl;//表示順序表的容量
cout<<test.max_size()<<endl;//表示容器的最大存儲,但實際到不了
test.resize(1);//設置大小,可以開辟出更多的空間,當參數小於時就銷毀空間
test.resize(10,2);//當大於時就開辟並初始化
cout<<test.size()<<endl;
test.empty();//用來檢查是否為空
test.reserve(10);//用來設置容器大小但是並不初始化,元素個數也沒變,變化不可見
test.shrink_to_fit();//將容器的大小收縮至於元素個數相同的大小
1
2
3
4
5
6
7
8
9
10
11
vector的數據操作
//關於元素存取的函數
//operator[] 既重載[]使其類似於數組元素的操縱,實現隨機訪問
cout<<test.at(1)<<endl;//類似於[]的作用,只是是一個函數行形式
cout<<test.front()<<endl;//顯示存在的第一個元素
cout<<test.back()<<endl;//顯示存在的最后一個元素
int* p = test.data();//取到了一個指向順序表的一個指針
cout<<test.front()<<endl;//顯示存在的第一個元素
//修改動作函數
test.assign(arr,arr+3);//assign替換函數可以替換一個對象的區間或者一個同類型的數組
test.push_back(4);//尾插,並沒有頭插
test.pop_back();//尾刪
test.insert(it,5);//插入指定位置
test.erase(it);//刪除指定位置
test.swap(test1);//交換函數,將兩個對象進行交換
test.clear();//清空整個順序表
vector<int>::iterator it2=test.emplace(it,5);//類似於insert但是會返回新插入元的迭代器
test.emplace_back(10);//類似於尾插
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
關於vector的介紹可以分為成員類型、迭代器、元素訪問、構造函數、堆棧操作、表操作、大小和容量、協助函數、以及vector等許多方面,但是本次主要寫的是關於如何使用vector。
簡單介紹
1
每次使用vector時需要包含vector的頭文件,在定義一個vector時我們會傳一個參數類型,
如int、char等內部類型,也可以是自定義類型,但是我們需要知道的是其實vector的模板是有
兩個參數的,如圖:
1
2
3
可以發現vector模板有兩個參數,只是第二個是缺省參數。
2
vector的本質上就是一個可以動態增容的數組,所以其中最為常用的就是對[]的重載,這樣
為了彌補這種缺陷。並且還有一些函數輔助使用,如front(),back(),data(),分別是返
1
2
3
每一個容器都存在迭代器,vector也支持,vector的迭代器可以說是非常的簡單,其中就包含
begin(),end()兩個最常見的迭代器函數,還有靜態的cbegin()和cend()函數和兩個反向操
1
2
4
因為vector是一個有序的容器,所以在某種特定時間也可以作
為堆棧甚至是表來操作,所以為了更接近堆棧的特征,vector也包push_back(),pop_back()
等函數,還有關於表操作的insert(),erase()的函數,還有clear(),swap()兩個函數,可以
說vector是非常全面的一個容器。
1
2
3
4
5
關於大小和容量的問題,vector也有許多成員函數,size(),capacity(),empty()等常見函
數還有兩個比較容易混淆的兩個函數resize()和reserver(),兩個函數最本質的區別就是前者
1
2
6
最后就是關於賦值運算符的重載,並且還有一系列比較運算符的重載。
1
完整代碼
#include<iostream>
#include<vector>
using namespace std;
void printvector(vector<int> v){
vector<int>::iterator it=v.begin();
for(it;it!=v.end();++it){
cout<<*it<<" ";
}
cout<<endl;
}
int main(){
//第一種:不傳參數
vector<int> vint;
vector<char> vchar;
vector<string> vstring;
//第二種:傳一個參數 相當於開辟了一個數組
vector<int> vint2(5);
vector<char> vchar2(5);
vector<string> vstring2(5);
//第三種:參數一 n個元素,每個元素的初值 開辟數組並進行初始化
vector<int> vint3(5,0);
vector<char> vchar3(5,'a');
vector<string> vstring3(5,"a");
//第四種:傳一段迭代器區間
vector<int> vint4(vint3.begin(),vint3.end());
vector<char> vchar4(vchar3.begin(),vchar3.end());
vector<string> vstring4(vstring3.begin(),vstring3.end());
//第五種:傳一個對象,既拷貝函數
vector<int> vint5(vint3);
vector<char> vchar5(vchar3);
vector<string> vstring5(vstring3);
//第六種:賦值運算符的重載
vector<int> vint6;
vector<char> vchar6;
vector<string> vstring6;
vint6=vint5;
vchar6=vchar5;
vstring6=vstring5;
//迭代器定義
//begin() end() rbegin() rend() 正向和反向迭代器
std::vector<int>::iterator itint=vint6.begin();
std::vector<char>::iterator itchar=vchar6.begin();
std::vector<string>::iterator itstring=vstring.end();
itint =vint6.end();
itchar = vchar.end();
itstring=vstring.end();
std::vector<int>::reverse_iterator ritint =vint6.rbegin();
std::vector<char>::reverse_iterator ritchar = vchar.rbegin();
std::vector<string>::reverse_iterator ritstring=vstring.rbegin();
ritint = vint6.rend();
ritchar = vchar6.rend();
ritstring=vstring.rend();
//cbegin() cend() crbegin() crend() const正向和反向迭代器
std::vector<int>::const_iterator citint=vint6.cbegin();
std::vector<char>::const_iterator citchar=vchar6.cbegin();
std::vector<string>::const_iterator citstring=vstring6.cbegin();
citint=vint6.cend();
citchar=vchar6.cend();
citstring=vstring.cend();
std::vector<int>::const_reverse_iterator critint;
std::vector<char>::const_reverse_iterator critchar;
std::vector<string>::const_reverse_iterator critstring;
critint=vint6.crbegin();
critchar=vchar6.crbegin();
critstring=vstring6.crbegin();
critint=vint6.crend();
critchar=vchar6.crend();
critstring=vstring6.crend();
//用來描述大小的一系列函數
vector<int> test(5,1);
cout<<test.size()<<endl;//表示順序表的元素個數
cout<<test.capacity()<<endl;//表示順序表的容量
cout<<test.max_size()<<endl;//表示容器的最大存儲,但實際到不了
test.resize(1);//設置大小,可以開辟出更多的空間,當參數小於時就銷毀空間
test.resize(10,2);//當大於時就開辟並初始化
cout<<test.size()<<endl;
test.empty();//用來檢查是否為空
test.reserve(10);//用來設置容器大小但是並不初始化,元素個數也沒變,變化不可見
test.shrink_to_fit();//將容器的大小收縮至於元素個數相同的大小
//關於元素存取的函數
//operator[] 既重載[]使其類似於數組元素的操縱,實現隨機訪問
cout<<test[1]<<endl;
cout<<test.at(1)<<endl;//類似於[]的作用,只是是一個函數行形式
cout<<test.front()<<endl;//顯示存在的第一個元素
cout<<test.back()<<endl;//顯示存在的最后一個元素
int* p = test.data();//取到了一個指向順序表的一個指針
*p =10;
cout<<test.front()<<endl;//顯示存在的第一個元素
//修改動作函數
cout<<"==============================="<<endl;
test.assign(vint6.begin(),vint6.end()-1);
printvector(test);
int arr[]={1,2,3};
test.assign(arr,arr+3);//assign替換函數可以替換一個對象的區間或者一個同類型的數組
printvector(test);
test.push_back(4);//尾插,並沒有頭插
printvector(test);
test.pop_back();//尾刪
printvector(test);
vector<int>::iterator it = test.begin();
it++;
test.insert(it,5);//插入指定位置
printvector(test);
test.erase(it);//刪除指定位置
printvector(test);
vector<int> test1(5,200);
cout<<"===============交換============"<<endl;
printvector(test);
printvector(test1);
test.swap(test1);//交換函數,將兩個對象進行交換
printvector(test);
printvector(test1);
cout<<"===============交換結束========"<<endl;
cout<<"===============清空============"<<endl;
printvector(test1);
test.clear();//清空整個順序表
printvector(test1);
cout<<"===============清空結束========"<<endl;
printvector(test);
vector<int>::iterator it2=test.emplace(it,5);//類似於insert但是會返回新插入元素的迭代器
printvector(test);
test.emplace_back(10);//類似於尾插
printvector(test);
return 0;
}
————————————————
版權聲明:本文為CSDN博主「頑強的土豆地雷」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/fuxingdecsdn/article/details/80411649