变长数组,倍增思想:和普通数组思想一样,只是长度可以根据需要进行更改,能自动扩大到当前数组大小的两倍(大部分情况下是两倍)
使用时需包含头文件,#include
其实质是一个动态数组,可以随时添加或删除元素;支持随机访问、在末尾添加元素、在任意位置插入或删除元素等操作,但在中间插入或删除元素会比较慢。
vector<类型>变量名(长度, 初值) ,详细定义如代码
// 省略长度和初始值
vectorarr;
vectorarr2;
// 只包含自定义长度
vector arr(10);
vector arr2(20);
// 包含长度和初始值
vector arr(10, 5);
vector arr2(10, 2.5);
在使用vector时,若没有指定初始值,不会是一个随机值,它会有一个默认值:0 ,这是和普通数组的区别之一
判空函数用于判断当前容器是否为空,此函数返回一个布尔值,通过判断返回值是否为真从判断该容器是否为空
#include
#include
using namespace std;
int main()
{
vector arr(5, 6);
bool flg = arr.empty();
if(flg) cout << "is empty" << endl;
else cout << "not empty" << endl;
return 0;
}
用于查看当前容器内实际元素的个数
#include
#include
using namespace std;
int main()
{
vector arr(5, 6);
int sizeNum = arr.size();
cout << sizeNum << endl;
return 0;
}
向容器尾部添加一个元素,如果容器空间不足会自动扩大容器空间,括号内是添加的元素值
#include
#include
using namespace std;
int main()
{
// 创建完成后,arr容器内有5个元素,其值均为 0
vector arr(5, 0);
// 此时查看元素个数,发现确实只有5个元素
int sizeNum = arr.size();
cout << sizeNum << endl;
// 向末尾添加一个元素,元素值为:10
arr.push_back(10);
// 再次查看实际元素个数,发现增加了一个
cout << arr.size() << endl;
return 0;
}
#include
#include
using namespace std;
int main()
{
// 创建完成后,arr容器内有5个元素,其值均为 0
vector arr(5, 0);
// 此时查看元素个数,发现确实只有5个元素
int sizeNum = arr.size();
cout << sizeNum << endl;
// 删除末尾元素
arr.pop_back();
// 再次查看实际元素个数,发现元素个数减少了一个
cout << arr.size() << endl;
return 0;
}
这里有两种删除,一是删除指定元素,二是删除指定区间的所有元素
删除指定位置元素:需要从第一个元素begin()位置开始计算,如删除第三个元素
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i < 5; i++)
{
arr.push_back(i);
}
// 查看当前容器所有元素
for(auto &num:arr)
cout << num << " ";
// 删除指定位置的元素
arr.erase(arr.begin()+2);
cout << endl;
for(auto &num:arr) cout << num << " ";
return 0;
}
删除指定区间所有元素:如删除第2到第4个之间所有元素,注意区间是左闭右开区间
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
// 查看当前容器所有元素
for(auto &num:arr)
cout << num << " ";
// 删除指定位置的元素
arr.erase(arr.begin()+1, arr.begin()+3);
cout << endl;
for(auto &num:arr) cout << num << " ";
return 0;
}
clear()函数删除当前数组中所有元素,实例如下
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
cout << arr.size() << endl;
arr.clear();
cout << arr.size() << endl;
return 0;
}
这里的引用是指对相应地址中的数据进行操作,包括对数据中的内容进行修改、排序等,想要获取到具体的值需要在前面加上解引用符号 * 星号,如访问第三个元素:则需要加2,begin指向的是向量数组中的第一个元素
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
cout << *(arr.begin()+2) << endl;
return 0;
}
原理同begin() ,但是这里的end()指向的是最后一个元素的下一个位置,所以要访问最后一个元素则需要在原来的基础上减 1
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
cout << *(arr.end()-1) << endl;
return 0;
}
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
cout << arr.front() << endl;
return 0;
}
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
cout << arr.back() << endl;
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
vector arr;
// 给容器赋值
for(int i = 1; i <= 5; i++)
{
arr.push_back(i);
}
for(int i = 5; i >= 0; i--)
{
arr.push_back(i);
}
// 快排函数
sort(arr.begin(), arr.end());
// 迭代器输出排序后的结果
for(auto &num:arr) cout << num << " ";
return 0;
}
下一章:STL-栈stack介绍