vector的介绍
1.vector是表示可变大小的数组容器;
2.与数组的不同是,vector的大小是可以动态改变的,大小会被容器自动处理;3
3.vector插入新数据时需要增容,vector会分配一个新的数组,然后将数据全部拷过来;
vector的使用
vector //无参构造
vector(size_type n,const value_type& val = value type()) //构造并初始化n个val;
vector (const vector & x); //拷贝构造
vector(Inputlterator first,inputlterator last) //使用迭代器进行初始化构造
手撕代码
using namespace std;
vector<int> v1(1);
vector<int> v2(1, 2);
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(v3);
vector iterator的使用
begin+end //分别获取第一个数据的位置和最后一个位置的下一个位置
rbegin+rend //分别获取最后一个数据位置和第一个数据前一个位置
#include<iostream>
#include<vector>
using namespace std;
void print_vector(const vector<int>& v)
{
vector<int>::const_iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
}
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
print_vector(v);
return 0;
}
注意事项
1.使用迭代器时需展开vector::const_iterator定义变量进行赋值,迭代器不仅仅可以遍历,还可以用于修改对象的值。
vector空间管理
size //获取数据的个数;
capacity //获取数据的容量;
empty //判空
resize //改变vector的size;
reserve //改变vector放入的capacity;
cout << v.size() << endl;
cout << v.capacity() << endl;
v.resize(3);
v.reserve(10);
print_vector(v);
cout << v.capacity() << endl;
注意事项
.1.vector的capacity是根据编译器决定的,增容的方式并不确定,不同编译器下的情况不同。
2.resize在开空间的同时还会初始化,影响size。
vector的增删查改
push_back //尾插
pop_back // 尾删
find //查找
insert //在position位置之前插入数据
erase //删除position位置的数据
swap //交换俩个vector的数据空间
operator[] //[]在vector的重载,利用下标访问数据
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.pop_back();
vector<int>::iterator pos = find(v.begin(), v.end(), 1);
v.erase(pos);
v.insert(pos, 10);
注意事项:find如果找到该元素,会返回该元素所在位置,如果不在,则返回end()位置
遍历方式
1.operator[]
2.迭代器
3.范围for
vector<int>::const_iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
}
cout << endl;
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
}
注意:1.迭代器可能会失效,如erase,insert,resize,reserve,assgin,push_back等pos会被移位或删除,造成野指针问题,系统会崩溃。
2.范围for底层是迭代器实现。