动态数组类: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在开头和末尾都可以进行插入和删除操作。

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