vector基本概念
vector数据结构和数组非常相似,也称为单端数组
vector与普通数组相比,不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展不是在原空间后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间
vector构造函数
功能:
- 创建vector容器
函数原型:
vector<T> v;
//默认构造函数vector(v.begin(), v.end());
//将v[begin(),end()]区间中的元素拷贝给本身vector(n,elem)
//构造函数将n个elem拷贝给本身vector(vec)
//拷贝构造函数
示例:
//1、默认构造
vector<int>v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
//2、通过区间方式进行构造
vector<int>v2(v1.begin(), v1.end());
//3、n个elem构造
vector<int>v3(10, 100); //10个100
//4、拷贝构造,常用
vector<int>v4(v3);
vector赋值
函数原型:
=
//将另一个容器中的数据拷贝到该容器中.assign(beg,end)
//将【beg,end)区间中的数据拷贝赋值给本身.assign(n,elem)
//将n个elem元素拷贝赋值给本身
示例:
vector<int>v1;
for(int i=0; i<10; i++){
v1.push_back(i);
}
//1、operator=赋值
vector<int>v2=v1;
//2、assign赋值
vector<int>v3;
v3.assign(v1.begin(), v1.end());
//3、n个elem赋值
vector<int>v4;
v4.assign(10,100);
vector容量和大小
功能:
- 对vector容器的容量和大小操作
函数原型:
.empty();
//判断容器是否为空.capacity();
//容器的容量.size();
//返回容器中元素的个数.resize(num);
//重新指定容器的长度为num,若容器变长,则以默认值填充新位置;若容器变短,则末尾超出容器长度的元素被删除.resize(num,elem);
//重新指定容器的长度为num,若容器变长,则以elem值填充新位置;若容器变短,则末尾超出容器长度的元素被删除
示例:
vector<int>v1;
for(int i=0; i<10; i++){
v1.push_back(i);
}
//判断容器是否为空
if(v1.empty()){
cout << "v1为空" << endl;
}
else{
cout << "v1不为空" << endl;
}
//判断容器容量,数值由计算机分配
cout << "v1的容量为:" << v1.capacity() << endl;
//判断容器大小,结果为10
cout << "v1的大小为" << v1.size() << endl;
//重新指定容器大小
v1.resize(15);
vector插入和删除
功能:
- 对vector容器进行插入、删除操作
函数原型:
插入:
.push_back(ele);
//尾部插入元素ele.insert(pos, ele);
//迭代器指向位置pos插入元素ele.insert(pos, n, ele);
//迭代器指向位置pos插入n个元素ele
删除:
.pop_back();
//删除最后一个元素.erase(pos);
//删除迭代器指向的元素.erase(start, end);
//删除迭代器从start到end之间的元素.clear();
//删除容器中所有元素
示例:
vector<int>v1;
//尾部插入元素10
v1.push_back(10);
//在指定位置插入元素100
v1.insert(v1.begin(),100);
//在指定位置插入2个元素1000
v1.insert(v1.begin(),2,1000);
//删除最后一个元素
v1.pop_back();
//删除迭代器指向位置的元素
v1.erase(v1.begin());
//清空
v1.erase(v1.begin(),v1.end()); //类似于v1.clear();
vector数据获取
功能:
- 对vector中的数据进行获取操作
函数原型:
[pos];
//返回指定位置pos的数据.at(pos);
//返回指定位置pos的数据.front();
//返回容器中第一个数据元素.back();
//返回容器中最后一个数据元素
示例:
vector<int>v1;
v1.assign(10,100); //v1赋值为10个100
//1、利用[]方式访问数组中元素
for(int i=0; i<v1.size; i++){
cout << v1[i] << " ";
}
cout << endl;
//2、利用.at()方式访问数组中元素
for(int i=0; i<v1.size; i++){
cout << v1.at(i) << " ";
}
cout << endl;
//返回容器中第一个元素
cout << "" << v1.front() << endl;
//返回容器中最后一个元素
cout << "" << v1.back() << endl;
vector互换容器
功能:
- 实现两个容器内元素进行互换
函数原型:
.swap(vec);
将vec与本身的元素互换
示例:
vector<int>v1;
v1.assign(10,100);
vector<int>v2;
v2.assign(10,0);
//v1与v2数据交换
v1.swap(v2);
swap可以使两个容器互换,从而达到实用的收缩效果:
vector<int>(v).swap(v)
;收缩后的容器容量(capacity)与大小(size)相等
vector预留空间
功能:
- 减少vector在动态扩展容量时的扩展次数,用于数据量较大的情况
函数原型:
.reserve(len)
//容器预留len个元素长度,预留位置不初始化,元素不可访问
示例:
vector<int>v;
//给容器预留10000空间
v.reserve(10000)
reserve与resize的区别:
- resize()改变了容器的capacity和size
- reserve():增加了容器的capacity,但是它的size没有改变