动态数组类:vector

举报
AI 菌 发表于 2021/08/05 01:34:42 2021/08/05
【摘要】 文章目录 1.vector的特点2.常用的vector操作3.常用的操作函数3.1在末尾插入元素push_back()3.2在指定位置插入元素insert()3.3删除末尾元素pop_back()3.4访问vector元素的三种方法 4.动态数组deque类5.总结 前言: 在程序设计过程中,如果我们知道数组的长度,可以定义静态数组。实际上,我们...


前言:
在程序设计过程中,如果我们知道数组的长度,可以定义静态数组。实际上,我们会经常遇到数组长度在一开始并不能确定的情况,那么这个时候就需要考虑用动态数组了,这样不仅节省了存储的内存,还使得程序更加灵活可靠。


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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

注意:vector <类型> dyarr //这里的类型不仅是int,也可以是float、类、vector等

3.常用的操作函数

3.1在末尾插入元素push_back()

//在数组dyarr1后添加一个元素50
dyarr1.push_back(50)

  
 
  • 1
  • 2

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]<<" ";
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3.3删除末尾元素pop_back()

pop_back将元素从vector末尾删除所需的时间是固定的,不随存储元素的个数而变。

//删除dyarr1最后一个元素
dyarr1.pop_back();

  
 
  • 1
  • 2

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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

4.动态数组deque类

deque类与vector类非常类似,但是支持在数组的开头末尾插入或删除元素。
使用前需要包含头文件:

#include <deque>

  
 
  • 1

(1)使用push_back和pop_back在末尾插入和删除元素

deque <int> dyarr1(5,10); //初始化数组5个元素都是10 
dyarr1.push_back(100);
dyarr1.pop_back();

  
 
  • 1
  • 2
  • 3

(2)使用push_front和pop_front在开头插入和删除元素

dyarr1.push_front(100);//在数组开头插入100
dyarr1.pop_front();//删除数组开头的元素

  
 
  • 1
  • 2

5.总结

(1)当不知道需要存储多少个元素时,务必使用动态数组vector或deque
(2)vector只能在末尾进行插入或删除,deque在开头和末尾都可以进行插入和删除操作。

文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。

原文链接:ai-wx.blog.csdn.net/article/details/105101009

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。