文章目录
Vector 使用简要总结
Vector 基本概念
vector数据结构和数组非常相似,也称为单端数组
C++中vector头文件是:include < vector >
vector与普通数组的区别
不同之处在于数组是静态空间,而vector可以动态扩展
注:这里的动态扩展是指,vector会自动申请更大的内存空间,然后将数据从新拷贝进去,释放原空间
- vector的迭代器支持随机访问
Vector构造函数
函数原型
vector<T> v; //采用类模板实现,默认构造函数
vector(v.begin(), v.end()); //将[begin,end)区间中的元素拷贝给本身
vector(n, elem); //将n个elem拷贝给本身
vector(const vector &vec); //拷贝构造函数
示例
vector<int> v; //无参构造
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
vector<int> v1(v.begin(), v.end());
vector<int> v2(2, 5); //两个5
vector<int> v3(v);
Vector 赋值操作
函数原型
vector& operator=(const vector &vec); //重载等号
assign(beg, end); //将[beg,end)区间中的数据拷贝给赋值本身
assign(n, elem); //将n个elem拷贝赋值给本身
示例
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
vector<int> v1 = v;
vector<int> v2;
v2.assign(v.begin(), v.end());
vector<int> v3;
v3.assign(2, 5);
Vector 容量和大小操作
函数原型
empty(); //判断容器是否为空 空返回1,非空返回0
capacity(); //容器的容量,往往大于等于size()
size(); //返回容器中元素的个数
resize(int num); //重新制定容器的长度为num,若容器变长,则以默认值填充
//如果容器变短,则末尾超出长度的元素被删除
resize(int num, elem); //重新制定容器长度为num,变长自动用elem填充
//容器变短则,直接删除末尾元素
示例
vector<int> v;
for (int i = 0; i < 14; i++)
{
v.push_back(i);
}
cout << v.size() << endl;
v.resize(16);
cout << v.capacity() << endl;
//resize改变的是size的结果,并不改变capacity的结果
Vector 的插入和删除
函数原型
push_back(elem); //入栈
pop_back(); //弹栈
insert(const_iterator pos, elem); //从pos位置插入元素
insert(const_iterator, int count, elem); //插入count数量的元素
erase(const_iterator pos); //删除制定位置元素
erase(const_iterator start, const_iterator end);//删除从start到end之间的元素(左闭右开)
clear(); //清空
示例
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
v.insert(v.begin() + 2, 2, 20);
v.erase(v.begin() + 1, v.end() - 2);
v.clear();
//如果v为空,则什么都不输出
for (auto i : v)
{
cout << i << endl;
}
Vector数据存取
函数原型
at(int idx); //返回索引idx所指的数据,从0开始
operator[]; //下标法
front(); //返回首个元素,栈底
back(); //返回最后元素,栈顶
示例
vector<int> v;
for (int i = 1; i < 11; i++)
{
v.push_back(i);
}
cout << v.at(2) << endl;
cout << v[2] << endl;
cout << v.front() << endl;
cout << v.back() << endl;
Vector互换
swap(vec);
巧用可以节省空间
vector<int> (v).swap(v);
相当于创建了一个跟v一样大的匿名对象然后跟v做交换,然后匿名对象被回收
Vector 预留空间
减少Vector在动态扩展容量时的扩展次数
函数原型
reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问
示例
vector<int> v;
v.reserve(100);