文章目录
============================ 【说明】 ===================================================
大家好,本专栏主要是跟学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类成员函数有:
函数名 | 解释 | 案例 |
---|---|---|
size | vector的大小,即数组实际存储的元素个数 | dyarr.size() |
capacity | vector的容量,即数组能够存储的最大容量。 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菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏。