文章目錄
前言:
在程序設計過程中,如果我們知道數組的長度,可以定義靜態數組。實際上,我們會經常遇到數組長度在一開始並不能確定的情況,那麼這個時候就需要考慮用動態數組了,這樣不僅節省了存儲的內存,還使得程序更加靈活可靠。
1.vector的特點
vector是個模板類,提供了動態數組的通用功能,特點如下:
(1)在數組末尾添加(刪除)元素所需的時間是固定的。
(2)在數組中間添加(刪除)元素所需的時間與該元素後面的元素個數成正比
(3)存儲的元素是動態的,而vector類負責管理內存。
2.常用的vector操作
下面給出了五種初始化(實例化)的方法:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//1.初始化一個動態數組dyarr1
vector <int> dyarr1;
//2.初始化一個動態數組dyarr2,數組的初始長度是10
vector <int> dyarr2(10);
//3.初始化一個動態數組dyarr3,包含10個元素,每個元素都是1
vector <int> dyarr3(10,1);
//4.將動態數組dyarr3複製到dyarr4
vector <int> dyarr4(dyarr3);
//5.使用迭代器,將dyarr4中的前5個元素複製到dyarr5
vector <int> dyarr5(dyarr4.begin(),dyarr4.begin()+5);
for(int i=0;i<dyarr5.size();i++)
cout<<dyarr3[i]<<endl;
return 0;
}
注意:vector <類型> dyarr //這裏的類型不僅是int,也可以是float、類、vector等
3.常用的操作函數
3.1在末尾插入元素push_back()
//在數組dyarr1後添加一個元素50
dyarr1.push_back(50)
3.2在指定位置插入元素insert()
push_back可以在末尾插入元素。如果要在中間插入元素,可以使用insert()
下面舉例三種插入方法:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> dyarr1(5,10);
//1.在數組dyarr1前插入20
dyarr1.insert(dyarr1.begin(),20);
//2.在數組dyarr1末尾插入兩個30
dyarr1.insert(dyarr1.end(),2,30);
//3.將數組dyarr2插入到dyarr1第一個元素的後面(後面的元素依次後移)
vector <int> dyarr2(2,50);
dyarr1.insert(dyarr1.begin()+1,dyarr2.begin(),dyarr2.end());
//顯示dyarr1的每一個元素
for(int i=0;i<dyarr1.size();i++)
cout<<dyarr1[i]<<" ";
}
3.3刪除末尾元素pop_back()
pop_back將元素從vector末尾刪除所需的時間是固定的,不隨存儲元素的個數而變。
//刪除dyarr1最後一個元素
dyarr1.pop_back();
3.4訪問vector元素的三種方法
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> dyarr1(5,10); //初始化數組5個元素都是10
//1.用下標運算符[]以數組方式訪問
for(int i=0;i<dyarr1.size();i++)
cout<<dyarr1[i]<<" ";
cout<<endl;
//2.用成員函數at()訪問
for(int i=0;i<dyarr1.size();i++)
cout<<dyarr1.at(i)<<" ";
cout<<endl;
//3.使用迭代器意義訪問打印出來(類似於指針)
vector <int>::iterator Locator=dyarr1.begin();
while(Locator!=dyarr1.end())
{
cout<<*Locator<<" ";
++Locator;
}
return 0;
}
4.動態數組deque類
deque類與vector類非常類似,但是支持在數組的開頭和末尾插入或刪除元素。
使用前需要包含頭文件:
#include <deque>
(1)使用push_back和pop_back在末尾插入和刪除元素
deque <int> dyarr1(5,10); //初始化數組5個元素都是10
dyarr1.push_back(100);
dyarr1.pop_back();
(2)使用push_front和pop_front在開頭插入和刪除元素
dyarr1.push_front(100);//在數組開頭插入100
dyarr1.pop_front();//刪除數組開頭的元素
5.總結
(1)當不知道需要存儲多少個元素時,務必使用動態數組vector或deque
(2)vector只能在末尾進行插入或刪除,deque在開頭和末尾都可以進行插入和刪除操作。