概念:C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的,vector容器的功能和数组非常相似,使用时可以把它看成一个数组
vector和普通数组的区别:
1.数组是静态的,长度不可改变,而vector可以动态扩展,增加长度
2.数组内数据通常存储在栈上,而vector中数据存储在堆上
变量声明:
例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。
例:用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector <int *> a.同理想用向量代替三维数组也是一样,vector <int**>a;再往上面依此类推.
vector<int> v; //声明一个int型向量
vector<int> v(5); //声明一个初始大小为5的int向量
vector<int> v(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> v(tmp); //声明并用tmp向量初始化v向量
vector<int> tmp(v.begin(), v.begin() + 3); //用向量v的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};
vector<int> v(arr, arr + 5); //将arr数组的元素用于初始化v向量;这里不包括arr[4]
vector<int> v(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
一些操作函数:
向量大小: v.size();
向量最大容量: v.max_size();
更改向量大小: v.resize();
v.resize(int n,element)表示调整容器v的大小为n,多的删去,少的用element 补,如果不写,默认为0
向量真实大小: v.capacity();
向量判空: v.empty();//常用 :while(!v[n].empty()){ }
减少向量大小到满足元素所占存储空间的大小: v.shrink_to_fit(); //C++ STL 中的内置函数,它减少容器的容量以适应其大小并销毁超出容量的所有元素
注意一下size()与capacity()的区别:
多个元素赋值: v.assign(); //类似于初始化时用数组进行赋值
v.assign(beg,end) ,将(beg,end)区间中的数据赋值给v;
v.assign(n,elem) , 将n个elem的拷贝赋值给v。
末尾添加元素: v.push_back();
末尾删除元素: v.pop_back();
任意位置插入元素: v.insert();
任意位置删除元素:v.erase(pos) 删除pos位置的数据,传回下一个数据的位置。
交换两个向量的元素:v.swap();
清空向量元素: v.clear();元素交换:c1.swap(c2) 将c1和c2元素互换。
元素翻转
#include <algorithm>
reverse(vec.begin(), vec.end());
元素排序
#include <algorithm>
sort(vec.begin(), vec.end()); //采用的是从小到大的排序
//如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:
bool Comp(const int& a, const int& b) {
return a > b;
}
sort(vec.begin(), vec.end(), Comp);
c.front() 传回第一个数据。
c.back() 传回最后一个数据,不检查这个数据是否存在。