vector动态数组应用及函数
vector动态数组是c++中一个常用的容器 它相比于c语言中的数组 多了很多功能
方便了使用
vector头文件
使用vector 首先要添加vector头文件
#include <vector>
vector的创建(1)
可以创建各种类型的vector动态数组 :整形,浮点型,字符型,对象类,字符串型都可以
创建方法也是类似的
vector<int> ivec; //保存int类型的动态数组
vector<string> svec; // 保存string类型的动态数组
vector<char> cvec; //保存char类型的动态数组
vector<double> dvec; //保存double类型的动态数组
vector的创建(2)
当然 如此牛批 强大的vector 也可以在进行创建的同时 做到一些牛批强大的初始化工作
比如
vector<int> ivec(10,1); //初始化为存有10个1的动态数组
vector<string> svec(10,"hi"); //当然这就是 10个string类型的 hi
vector<char> cvec(100,'a'); //同理 100个'a'
vector<double> dvec(10,1.01); //初始化为含有10个1.01的double类型动态数组
vector的遍历方法
vector支持下标和迭代器遍历
代码如下:
for (vector<int>::size_type i = 0; i != a.size();i++)
cout << a[i] << " ";
vector<int>::iterator it; //it为动态数组的迭代器
for (it = a.begin(); it != a.end();it++)
cout << *it << " "; //迭代器可理解为容器的指针 输出就要加*
//两种遍历方法结果相同
vector常用函数
那先创建一个动态数组吧
vector<int> a(10, 2); //容器里初始化为10个2;
-
a.push_back( x ) ; 将元素x添加到动态数组尾部
-
a.pop_back(); 将a动态数组中的最后一个元素删除
-
a.begin(); 我也不太懂感觉返回的是a的第一个元素的迭代器
-
a.end(); 返回的是指向a的最后一个元素的后面的迭代器
-
a.size(); 返回a的长度 即元素个数
-
a.front(); 返回a中第一个元素
-
*a.back();*返回a中最后一个元素
-
a.insert(迭代器,待插入元素) ; 在指定位置的前面添加元素
a.insert(迭代器,m,n) ; 在指定位置的前面添加 [m,n) 区间的所有元素 -
a.erase(it) ; 删除指定位置的元素 it是a的迭代器类型
如:
a.erase(a.begin()+1); 将a中下标为1的元素删除
(ps:vector存放元素从0开始 所以上式也可以理解为删除第二个元素
也支持删除指定范围内的元素
a.erase(a.begin()+2,a.begin()+6) ; 删除下标范围 [2,6) 的元素
(ps:碎碎念注意范围 )
a.erase(a.begin()+2,a.end()) ; 这就是把下标为2的元素开始到末尾的所有元素删除 -
a.empty(); 判断容器是否为空 若为空返回true
-
a.swap(b); 将a,b两数组中元素整体交换
那 函数介绍完了 展示一下代码应用
#include <vector>
#include <algorithm>
#include <iostream>
//vector动态数组容器:向量
bool rule(const int &a,const int &b)
{
return a > b;
} //自定义排序规则从大到小排列
using namespace std;
int main()
{
vector<int> ivec(10,0); //保存int类型的动态数组
vector<string> svec(10,"hi"); //10个hi
vector<char> cvec(100,'a');
vector<double> dvec(10,1.01);
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(10);
cout << "int vector:" << ivec.size() << endl;
for (auto it = ivec.begin(); it != ivec.end();it++)
{
cout << *it << " ";
}
cout << endl;
cout << endl;
vector<int> a(10, 2); //容器里初始化为10个2;
a.push_back(15);
a.push_back(2);
cout << "a.vector:" << a.size() << endl;
for (vector<int>::size_type i = 0; i != a.size();i++)
cout << a[i] << " ";
cout << endl;
//erase用法
a.erase(a.begin()+2); //删除第三个元素
a.erase(a.begin() + 6, a.end()); //删除下标6到最后一个元素
//insert用法
a.insert(a.begin() + 2, 500); //在第三个元素前插入500
for (vector<int>::size_type i = 0; i != a.size();i++)
cout << a[i] << " ";
cout << endl << endl;
vector<int>::iterator m;
//sort函数用法
sort(a.begin(), a.end()); //默认从小到大排序
for (auto it = a.begin(); it != a.end();it++)
cout << *it << " ";
cout << endl;
cout << endl;
sort(a.begin(), a.end(),rule);
for (auto it = a.begin(); it != a.end();it++)
cout << *it << " ";
cout << endl;
cout << endl;
//clear用法
a.clear(); //清空所有元素
//若容器为空 empty返回值为真
if(a.empty())
cout << "empty over" << endl;
cout << endl;
cin.clear();
cin.sync();
cin.get();
return 0;
}