概念
- STL(Standard Template Library),即标准模板库,是一个高效的C++程序库,包含了诸多常用的基本数据结构和基本算法。
- 从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。
- 从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的。
一、定长数组
#include<array>
array<int,3> iArray = {1,2,3};
类似于数组,定义了一个长度为3类型为int的定长数组。长度不可改变。和普通数组不一样的是,可以使用array提供的方法。
- 访问数据:
iArrat.at(0);
返回第一个数据(不能像数组那样使用iArray[0],不过可以重载”[]”后使用) iArray.size();
返回元素个数iArray..empty();
判断是否为空,是则返回true,不是则falseiArray.swap(iArray2);
交换iArray容器和iArray2容器的数据- 通过迭代器遍历数组
array<int, 3>::iterator iter;
for (iter = iArray .begin(); iter != iArray .end(); iter++)
{
cout << *iter;
}
二、动态数组
创建动态数组
方式1:直接放数据进去创建
#include<vector>
vector<int> Vec = {1,2,3};
方式2:带长度创建
vector<int> Vec(3);
for(int i = 0;i<3;i++)
{
Vec[i] = i;
}
动态数组允许类似数组这样Vec[1]
访问。
方式3:使用提供的方法
vector<int> Vec; //不带长度
Vec.push_back(1);
Vec.push_back(2);
往数组中依次插入1,2
方式4:使用普通数组初始化vector
vector<int> Vec;
int arr[3] = {1,2,3};
Vec.assign(arr,arr+3);
用一段数组初始化,可以指定数组中的哪段数据,不一定全部。
vector中的一些方法
clear();
清空size()
元素个数和capacity()
容量。当指定了vector的长度为4,但是只放入了3个数据,这时size()为3,capacity()为4。front()
和back()
访问最前面的和最后面的数据erase()
传参要传迭代器,删除迭代器指向的数据位置。可以通过这种方式删除某个数据(不过要处理得当)
for (iter = Vec.begin(); iter != Vec.end();)
{
if (*iter == 2)
iter = Vec.erase(iter);
else
iter++;
}
这里的逻辑是找到符合的数就删除不iter++,并iter重新指向,找不到就++。因为erase删除后,iter会找不到位置,这时直接++回报错,要重新指向。而且它返回的是vector的当前位置(这个位置没删除前是2的,删除后是下一个数据的),这时还进行++会跳过这个位置。