STL容器之vector
顺序容器 vector(矢量容器)deque(双端队列容器)list(双向列表)
关联容器 set(单重集合)multimap(多重映射表)
容器适配器 stack(栈)queue(队列) prority_queue(优先级队列)
1.包含在头文件#include<vector>
2.功能 模拟动态数组
3.实现 开辟一定大小的数组,随元素的增加而增加,如果空间不够,自动采取扩容机制。
扩容规则
以原空间大小的2倍重新开辟一块空间,将旧空间的元素挪到新空间上,再继续添加元素,一直遵循每次扩容大小是原来的两倍
常用函数 vector vec;
vector底层是一个数组,所以内存是连续的,可以采取下标访问方式,尾插和尾删的时间复杂度为O(1),所以vector提供了push_back()、pop_back()
vec.begin():指向vec的首元素
vec.end();指向vec尾元素的后一个位置 这个函数用来确定vec元素的范围。
vec.front();获取头部元素
vec.back();获取尾部元素
vec.size():表示vec中实际元素的个数
vec.capacity():返回vec实际所能容纳的元素大小
vec.max_size():表示返回vector最大容量
vec.insert(pos,elem)//pos是vector的插入元素的位置
vec.insert(pos,n,elem)//在pos位置上的插入n个元素elem
vec.insert(pos,begin,end)//
vec.erase(pos)//移除pos上的位置元素,返回下一个数据的位置
vec.erase(begin,end)//移除[begin,end]区间的数据,返回下一个元素的位置
reverse(pos1,pos2)//将vector中的pos1~pos2的元素逆序存储
vector初始化方式
vector vec;//默认方式初始化底层没有为其分配内存空间。
vector vec1(10);//指定了开始的容量为10,默认为0。
vector vec2(10,20);//指定了开始的容量10和每个格子的默认值为20
vector vec3(vec3);//调用拷贝构造函数,用同类型已经存在的对象构造同类型的新对象。
int array[10]={1,2,3,4,5,6,7,8,9,10}
vector vec4(array,array+10);//使用数组区间传数组实现vector初始化。
·vector元素遍历
使用迭代器
迭代器:正向迭代器iterator 反向迭代器reserve_iterator
常量正向迭代器 const_iterator
常量反向迭代器 const_reserve_iterator
vector<int>::iterator it =vec.begin();
for(;it!=vec.end();++it)
{
cout<<*it<<endl;
}
vector中插入元素
push_back()
insert(vec,begin(),val);头插
insert(vec.end(),val);尾插
vetcor删除元素
删除指定元素
删除重复元素,只保留一个
vec.pop_back();//从尾部移除一个元素
vec.clear();//清空vector中的元素
vector vec;
vec.push_back(2);//尾插2
vec.push_back(3);//尾插3
int array[5]={1,2,3,4,5};
vector<int> v1(array,array+5);
reverse(v1.begin(),v1.end());//反转数组
v1.insert(v1.end(),9);//尾插
v1.insert(v1.begin(),8);//头插
vector<int>::iterator it =v1.begin();
reverse(it+1,it+4);//反转第一个和第五个元素
v1.insert(it+1,6);//vec[1]的位置插入6
for(it =v1.begin();it!=v1.end();it++)
{
cout<<*it<<endl;
}