動態數組類:vector


前言:
在程序設計過程中,如果我們知道數組的長度,可以定義靜態數組。實際上,我們會經常遇到數組長度在一開始並不能確定的情況,那麼這個時候就需要考慮用動態數組了,這樣不僅節省了存儲的內存,還使得程序更加靈活可靠。


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在開頭和末尾都可以進行插入和刪除操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章