vector动态数组
- (一)、什么是vector?
- (二)、vector的作用是什么
- (三)、经典用法:
- 1.vector函数的定义:
- 代码展示:
- 效果展示:
- 2.vector的初始化:
- 1.vector 函数名; 初始化为空
- 2.vector 函数名(a,b).定义a个空间,都初始化为b。
- 3.vector 函数名1=函数名2. 把动态数组2复制给动态数组1。
- 4.vector 函数名1(函数名2.begin(),函数名2.end()). 把动态数组2复制给动态数组1。
- 5.vector 函数名(a,a+sizeof(a)/sizeof(数据类型)),把普通数组a复制给动态数组。
- ==========================================
- 代码展示:
- 效果展示:
- 3.vector的简单属性
- 1.【动态数组的访问下标】
- 2.【动态数组的访问at函数】
- 3.【动态数组的长度】
- 4.【获取动态数组第一个元素】
- 5.【获取动态数组最后一个元素】
- 6.【判断动态数组是否为空】
- 7.【动态数组的交换】
- 8.【动态数组元素的清空】
- ====================================
- 代码展示:
- 效果展示:
- 4.vector的插入与删除
- 1.【单尾部插入】
- 2.【多元插入】 从哪插 插什么
- 3.【普通数组插入动态数组】
- 4.【单尾部删除元素】
- 5.【多元删除】
- 6.vector的遍历(for)
- 7.【迭代遍历】
- ====================================
- 代码展示:
- 效果展示:
- (四)、实战项目
- 代码展示:
- 1.**第一个**经典列题:(课堂刷题的删除与插入)
- 效果展示:
- 2.**第二个**经典列题:(进行两个整形数组合并的问题)
- 代码展示:
- 效果展示:
(一)、什么是vector?
Vector类 是在 java 中可以实现自动增长的对象数组,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
(二)、vector的作用是什么
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。[1]
(三)、经典用法:
1.vector函数的定义:
代码展示:
#include using namespace std;int main(){ int a[10]; //正常定义 vector<int> str_a; //vector 定义 char b[10]; vector<char> str_b; float c[10]; vector<float> str_c;}
效果展示:
2.vector的初始化:
1.vector 函数名; 初始化为空
2.vector 函数名(a,b).定义a个空间,都初始化为b。
3.vector 函数名1=函数名2. 把动态数组2复制给动态数组1。
4.vector 函数名1(函数名2.begin(),函数名2.end()). 把动态数组2复制给动态数组1。
5.vector 函数名(a,a+sizeof(a)/sizeof(数据类型)),把普通数组a复制给动态数组。
==========================================
代码展示:
#include using namespace std;int main(){ int a[5] = {1,2,3,4,5}; vector<int> str_a; //初始化为空 vector<int> str_a1(4, 88); // 定义四个元素,每个元素的值为88; vector<int> str_a2 = str_a1; //把a1的值复制给a2; vector<int> str_a3(str_a1.begin(), str_a1.end()); //把a1的值复制给a2; vector<int> str_a4(a, a + sizeof(a)/sizeof(int)); //复制正常数组的初始化 return 0;}
效果展示:
3.vector的简单属性
1.【动态数组的访问下标】
函数名[n], n就是访问第几个元素
2.【动态数组的访问at函数】
函数名.at(n), n就是访问第几个元素
3.【动态数组的长度】
函数名.size(), 获取长度
4.【获取动态数组第一个元素】
函数名.front()
5.【获取动态数组最后一个元素】
函数名.back()
6.【判断动态数组是否为空】
函数名.empty() ,假如是返回true.
7.【动态数组的交换】
函数名1.swap(函数名2) 把俩函数的内容交换
8.【动态数组元素的清空】
函数名.clear()
====================================
代码展示:
#include #include using namespace std;int main(){ int a[5] = {1,2,3,4,5}; vector<int> str_a; //初始化为空 vector<int> str_a1(4, 88); // 定义四个元素,每个元素的值为88; vector<int> str_a2 = str_a1; //把a1的值复制给a2; vector<int> str_a3(str_a1.begin(), str_a1.end()); //把a1的值复制给a2; vector<int> str_a4(a, a + sizeof(a)/sizeof(int)); //复制正常数组的初始化 int a5 = str_a4[2]; //vector 动态数组的访问,用下标 int b = str_a4.at(2); // 利用at函数,也就是下下标 cout << "a=" << a5 << " " << "b=" << b << endl; cout << "str_a4的长度为:" << str_a4.size() << endl; //获取长度, cout << "str_a4的第一个元素为:" << str_a4.front() << endl; // 获取第一个元素 cout << "str_a4的第一个元素为:" << str_a4.back() << endl; //获取最后一个元素 bool p = str_a4.empty(); //判断是否为空 str_a4.swap(str_a1); //str_a4.clear(); //对数组元素清空 return 0;}
效果展示:
4.vector的插入与删除
1.【单尾部插入】
函数名.push_back(a), 向尾部插入一个元素a,只能一个个插入,且只能在尾部。
2.【多元插入】 从哪插 插什么
函数名1.insert(函数名1.begin(),a), 向头部插入一个元素a.函数名1.insert(函数名1.end(),n,a),向尾部插入n个元素 a.
3.【普通数组插入动态数组】
函数名1.insert(函数名1.begin(),普数组名,普数组名+sizeof(普数组名)/sizeof(函数类型))从哪开始 普通数组首位置,普通数组末位置
4.【单尾部删除元素】
函数名.pop_back() 删除最后一个元素
5.【多元删除】
函数名.(函数名.begin(),函数名.begin()+n) 从哪开始,删除几个.(只能是begin 和end不能换成数字)
6.vector的遍历(for)
for (int i = 0; i < 函数名.size(); i++) //遍历 { cout << 函数名[i] << " "; }
7.【迭代遍历】
vector<函数类型>::iterator itor; for (itor = 函数名.begin(); itor != 函数名.end(); itor++) { cout << *itor << " "; }
====================================
代码展示:
#include #include using namespace std;int main(){ int a[20] = {1,2,3,4,5}; vector<int> str_a; //初始化为空 vector<int> str_a1(4, 88); // 定义四个元素,每个元素的值为88; vector<int> str_a4(a, a + sizeof(a)/sizeof(int)); //复制正常数组的初始化 int a5 = str_a4[2]; //vector 动态数组的访问,用下标 int b = str_a4.at(2); // 利用at函数,也就是下下标 cout << "a=" << a5 << " " << "b=" << b << endl; cout << "str_a4的长度为:" << str_a4.size() << endl; //获取长度, cout << "str_a4的第一个元素为:" << str_a4.front() << endl; // 获取第一个元素 cout << "str_a4的第一个元素为:" << str_a4.back() << endl; //获取最后一个元素 bool p = str_a4.empty(); //判断是否为空 str_a4.swap(str_a1); str_a4.push_back(100); // 只能向尾部插入元素. 一个一个插入 //str_a.clear(); //对数组元素清空 str_a4.insert(str_a4.begin(), 888); // 从哪插入, 插入什么元素 str_a4.insert(str_a4.begin(),3,888); // 从哪插入, 插入几个 插入什么元素 int szint1[] = { 12,13,45 }; str_a4.insert(str_a4.end(), szint1, szint1 + sizeof(szint1) / sizeof(int)); //str_a4.pop_back(); //删除最后一个元素; 一个一个删除 //str_a4.erase(str_a4.begin(), str_a4.begin()+2); // 从哪开始, 删除几个 //str_a4.erase(str_a4.begin(), str_a4.end()); for (int i = 0; i < str_a4.size(); i++) //遍历 { cout << str_a4[i] << " "; } vector<int>::iterator itor; //迭代器遍历 for (itor = str_a4.begin(); itor != str_a4.end(); itor++) { cout << *itor << " "; } return 0;}
效果展示:
(四)、实战项目
代码展示:
1.第一个经典列题:(课堂刷题的删除与插入)
主要思路:我们要知道各个性质的关系,然后进行调用.
#include #include using namespace std;int main(){ vector<int> str_a(13); for (int i = 0; i < 13; i++) { cout << "请输入第" << i + 1 << "个数为:" << endl; cin >> str_a[i]; } for (int j = 0; j < 13; j++) { if (str_a[j] == 3) { str_a.erase(str_a.begin() + j, str_a.begin() + j); } else { cout << str_a[j] << " "; } } return 0;}
效果展示:
2.第二个经典列题:(进行两个整形数组合并的问题)
主要思路:首先我们要分析问题得出,题目是要得到两个数组得合并,然后得知vector动态数组恰好有一个特点就是可以根据我们的需求进行变化,我们抓住这一点开始深入调查。创建两个动态数组,然后对数组1进行赋值,再把数组1的值复制给数组二,再创建临时元素,运用push_back()向尾部插入元素的性子,进行插入合并,最后通过for动态遍历.
代码展示:
#include #include // vectoe动态数组的头文件using namespace std;int main(){int n,m;cout << "请您输入第一个元素数组的个数:" << endl;cin >> n;vector<int> str_int1(n);for (int i = 0; i < str_int1.size(); i++) //对动态数组一进行动态输入{cout << "请输入动态数组1第" << i + 1 << "个元素:" << endl;cin >> str_int1[i];}cout << "请输入第二个数组的元素个数:" << endl;cin >> m;vector<int> str_int2(str_int1); //把动态数组1复制给动态数组2for (int j = 0; j < m; j++){cout << "请输入动态数组2第" << j+ 1 << "个元素:" << endl;int temp; cin >> temp; //动态数组2的元素str_int2.push_back(temp); //把动态数组2的元素插入数组2}cout << "两个整型数组合并后为:" << endl;for (int k = 0; k < m + n; k++){cout << str_int2[k] << " ";}return 0;}