vector介绍:

1、vector 数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组。相当于顺序存储的线性表,寻找元素快!但是插入元素的时间却很大(list是一个双向链表,在同一个位置插入大量的数据是速度很快,但是查找的速度就会慢很多)

2、和普通数组一样可以通过下表索引来进行访问

3、相对其他动态序列容器,vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效!!!

4、vector动态数组 可用通过数组名进行直接赋值

5、缺点:当新元素插入时,这个数组需要重新分配以增加存储空间。其做法是,分配一个新的数组,然后将全部元素转移到这个数组。就时间而言,这是一个相对代价高的任务,因为每一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。(时间复杂度和空间复杂度相对而言较高

Vector操作:

1、声明变量

#include<vector>//引入头文件
using namespace std;//其所在的命名空间

vector<int> vec;  //声明一个int 型的向量

vector<int> vec1(4,1);//vec的内容为 1,1,1,1、
vector<int> vec2{1,2,3,4,5,6};//vec的内容为 1,2,3,4,5,6

vector<int> vec3(vec2);//声明并用tmp向量初始化vec向量

int arr[5] = {1,2,3,4,5,6};
vector<int> vec4(arr,arr+5);//将arr数组的元素用于初始化vec向量
vector<int> vec5(&arr[1],&arr[4]);//将arr[1]~arr[4]范围内的元素作为vec的初始值
//说明:当然不包括arr[4]元素,末尾指针都是值结束元素的下一个元素
//这个主要是为理和vec.end()指针统一

2、插入元素

1.vec.push_back(同类型量);作用是在vector的末尾插入新元素
2.insert()第一个参数为迭代器,作用为在迭代器前面插入新元素
3.assign(5,1)向vector中加入5个去,同时清楚掉以前的元素

//vec的内容为 1,2
	vector<int> vec1;
	vec1.push_back(1);
	vec1.push_back(2);

	vector<int> vec2(vec1);
	vector<int>::iterator it;
	it = vec2.begin();
	vec2.insert(it, 5);//在第一个元素前添加5
	it = vec2.begin();//每当新加一个元素时内存重新分配所以要重新为迭代器分配指针
	vec2.insert(it, 2, 6);

	vector<int> vec3(vec2);
	vec3.assign(2, 5);//清除所有元素只留两个

3、删除元素

1.pop_back()删除最后一个元素
2.erase(删除指定位置元素。其中参数要是指针便变量,比如 begain(),end()以及迭代器值,

vec.erase(vec.begin()+2);//删除第三个元素

3.clear()清除所有元素
4.empty()判断该数组是否为空

4、遍历数组

1.front()访问第一个元素(第一个元素的值而不是地址!begin()相反)
2.back()访问最后一个元素(第一个元素的值而不是地址!end()相反)
3.size()数组的元素个数

vector<int> a = {1,2,3,4,5};
	//像数组一样以下表访问
	for (int i = 0; i < a.size(); i++)
	{
		cout << a[i] << " ";
	}
		//以迭代器访问
	vector<int>::iterator it;
	for (it = a.begin(); it != a.end(); i++)
	{
		cout << *it << " ";
	}

6、翻转和排序的遍历

vector<int>vec = { 1,2,3,4,5 };
reverse(vec.begin(), vec.end());//将元素翻转,即逆序排列

sort(vec.begin(), vec.end());//采用的是从小到大的排序
//如果想从小到大排序,可以采用上面的反转函数,也可以采用下面方法;
bool Comp(const int &a, const int &b) {
	return a > b;
}
sort(vec, begin(), vec.end(), Comp);