【跟学C++】C++动态数组——vector/deque类(Study14)


 ============================ 【说明】 ===================================================
  大家好,本专栏主要是跟学C++内容,自己学习了这位博主【 AI菌】的【C++21天养成计划】,讲的十分清晰,适合小白,希望给这位博主多点关注、收藏、点赞。
  主要针对所学内容,通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新,其他一些知识。若有侵权,联系删除!共同维护网络知识权利!
 =======================================================================================
   写在前面
  至此,我们了解了C++的基本语法,但是进一步学习C++,数据结构是必不可少的内容。 数据结构与算法决定了代码测存储方式,以及代码执行效率。
  数据结构的重要性不言而喻, 关于数据结构的基本知识可以转至本人另一专栏====>数据结构】。同样也可以阅读博主【 AI菌】写的【 数据结构与算法】,比较通俗易懂,可以学习学习!


前言

  在实际得程序设计过程中,如果知道数组长度或存储空间大小预先知道大小,我们可以很方便得定义静态数组。但实际过程中,我们会遇到数组长度起初无法确定得情况,那这时动态数组就是我们所需要定义的。动态数组能够一定程度上节省存储内存,同时使程序更加灵活。


1、动态数组特点

  vector是一个模板类,为动态数组提供了通用功能,动态数组主要特点如下:
  (1) 在数组尾端添加或删除元素,时间固定,时间复杂度O(1);
  (2) 在数组中间添加或删除元素,时间与增加或删除元素后的元素个数成正比;
  (3) 存储的元素是动态的,vector的主要工作就是负责内存管理

2、实例化

  关于数组的实例化,给出5种示例:

#include <iostream>
#include <vector>
#include <deque>
using namespace std;

int main() {
	//实例化Vector
	//1、初始化整型动态数组arr1
	vector <int> arr1;
	//2、初始化长度为10得动态数组arr2
	vector <int> arr2(10);
	//3、初始化动态数组arr3,长度为10,每个元素为1
	vector <int> arr3(10, 1);
	//4、初始化动态数组arr4,复制arr3
	vector <int> arr4(arr3);
	//5、使用迭代器,将arr4中前5个元素复制到arr5
	vector <int> arr5(arr4.begin(), arr4.begin() + 5);
	for (int i = 0; i < arr5.size(); i++)
	{
		cout << arr5[i] << endl;
	}
	return 0;
}

  注:<类型>中的类型不仅是整型int,也可以是浮点型float、类、vector等。

3、访问vector内的元素

#include <iostream>
#include <vector>
#include <deque>
using namespace std;

int main() {

	vector <int> dyarr(10, 5);
	//1、以下标运算符[]方式访问
	cout << "The way of [] :" << endl;
	for (int i = 0; i < dyarr.size(); i++)
	{
		cout  << dyarr[i] << " ";
	}
	cout << endl;

	//2、用成员函数at方式访问
	cout << "The way of at :" << endl;
	for (int j = 0; j < dyarr.size(); j++)
	{
		cout << dyarr.at(j) << " ";
	}
	cout << endl;

	//3、使用迭代器的方式访问
	vector <int> ::iterator Locator = dyarr.begin();
	cout << "The way of iterator :" << endl;
	while (Locator != dyarr.end())
	{
		cout << *Locator<<" ";
		Locator++;
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

4、vector常用成员函数

  我们需要灵活使用动态数组,仅学会实例化创建、访问vector是不够的,还需要学习vector的成员函数,从而更方便的处理动态数组问题。我们常见的vector类成员函数有:

函数名解释案例
sizevector的大小,即数组实际存储的元素个数dyarr.size()
capacityvector的容量,即数组能够存储的最大容量。 size是小于或等于capacity的大小dyarr.capacity()
push_back()在末尾插入元素dyarr.push_back(50)
insert在指定位置插入元素见4.1
pop_back()删除末尾元素dyarr.pop_back()
erase删除任意位置元素见4.2
4.1、vector常用成员函数——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]<<" ";
}

4.2、vector常用成员函数——erase
#include <iostream>
#include <vector>
using namespace std;

int main ()
{
  std::vector<int> myvector;
  
  for (int i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);

  return 0;
}

5、动态数组deque类

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

#include <deque>
5.1、deque类与vector类对比

(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();//删除数组开头的元素

  注:当无法确认存储元素个数时,可以采用动态数组vector或deque;vector只能在末尾插入删除,而deque除了末尾插入删除,可以在开头插入删除元素。

6、总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,我也会及时更新,来督促自己学习进度。一开始提及的博主【AI菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqy阳

预祝上岸,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值