vector
为了方便,本页面所有演示类型均为int
构造函数
vector<int> v1; //创建一个空容器
vector<int> v2(n); //创建一个长度为n的容器,所有元素默认为0
vector<int> v3(n,elem); //创建一个长度为n的容器,所有元素默认为elem
vector<int> v4(start,end); //(start和end为int*)创建一个容器,将start到end之间的内存复制给容器(左闭右开)
vector<int> v5(v4); //创建一个容器,其内容是v4的复制
vector<int> v6={1,2,3,4,5}; //类似数组初始化
赋值(vector
支持下标访问,也支持迭代器访问)
vector<inr> v1={1,2,3},v2={4,5,6},v3; //演示用
v3.assign(n,elem); //清空容器,让将n个elem写入容器
v3.assign(v1.begin(),v1.end()); //清空容器,将v1的部分(这里是全部)复制到v3(参数是指针,左闭右开)
v3=v1; //将v1复制给v3(重载=)
v1.swap(v2); //交换v1和v2
大小和判断
vector.size();//返回容器长度
vector.empty();//判断容器是否为空
vector.resize(n);//将容器长度设定为n,若容器边长则填充默认值,容器变小则丢弃多余值
vector.resize(n,elem);//将容器长度设定为n,若容器边长则填充elem,容器变小则丢弃多余值
访问、遍历
vector
虽然支持下标访问,但不推荐,更推荐迭代器访问
vector[n]; //直接下标访问,不推荐,越界访问编译不报错程序会卡死
vector.at(n); //vector内部at方法,返回下标为n的数据,越界访问编译报错
for(vector<int>::iterator it=vector.begin();it!=vector.end();it++){ //迭代器
cout<<*it;
}
插入、删除
vector.push_back(elem);//在末尾插入elem
vector.pop_back();//从末尾弹出一个元素,返回这个元素
vector.erase(pos);//删除pos位置的元素,返回指向pos位置的迭代器
vectot.insert(pos,elem);//在pos位置插入一个elem,返回新数据的位置(迭代器)
vectot.insert(pos,n,elem);//在pos位置插入n个elem,无返回值
vectot.insert(pos,begin,end);//在pos位置插入[begin,end)间的数据,无返回值
vector
中的迭代器
成员函数 | 功能(vecror<int> v={1,2,3,4} ) |
---|---|
begin() |
返回容器第一个元素的正向迭代器(指向v[0] ) |
end() |
返回容器最后一个元素之后一个位置的正向迭代器(指向v[4] ) |
rbegin() |
返回容器最后一个元素的反向迭代器(指向v[3] ) |
rbegin() |
返回容器第一个元素之前一个位置的反向迭代器(指向v[-1] ) |
vector
中迭代器的失效
vector
在进行扩容等内存移动的操作时,之前声明的迭代器会失效(成为野指针),需要重新赋值
使用insert(pos,elem)
函数触发扩容时会返回新vector
中pos
位置的迭代器,可以使用it=v.insert(n,elem);
来直接刷新迭代器`