之前学习自定义模板时觉得自定义模板比较抽象,使用起来较为繁琐。作为C++标准库相当重要的一部分,STL库提供一系列组件操作。为我们解决了这个问题。
标准模板库STL包括容器、迭代器、算法;
容器指包含数据的数据结构,容器中包含的对象是元素;
迭代器指用来访问容器中的元素对象,相当于元素对象的指针;
算法指一些能在各种容器中通用的标准算法,如排序、插入等;
算法使用迭代器在容器上进行操作。
序列式容器:
序列式容器在STL中主要包含常见的三种:向量vector、链表list和双端队列deque。
向量vector为一种顺序存储同类型元素的数据结构。它是一种数组方式的思路实现,并且可以随机访问的序列。
链表list是一种实现双向链表数据结构的容器。它只支持顺序访问序列中的元素。该容器在删除、插入相应元素时,效率较高。另外,list可以与vector一样在需要时动态改变其大小。
双端队列deque是类似向量的一种队列结构。它允许在该队列的头部和尾部插入并且删除相应的元素。同时,它也支持针对其元素的顺序以及随机访问。
向量vector接口方法说明
接口方法名称 |
基本功能说明 |
vectorObject.assign(start,end) |
将迭代器start与end之间的数据元素赋值给vectorObject |
vectorObject.assign(n, elem) |
将n个elem元素赋给其调用的vectorObject |
vectorObject.at(index) |
返回向量vectorObject中指定索引index所指的数据元素 |
vectorObject.back() |
返回向量vectorObject中最后一个数据元素 |
vectorObject.begin() |
返回指向向量vectorObject中第一个元素的迭代器 |
vectorObject.capacity() |
返回向量vectorObject中元素的个数 |
vectorObject.clear() |
清空向量vectorObject中的数据元素 |
vectorObject.empty() |
判断向量vectorObject是否为空,为空则返回true值 |
vectorObject.end() |
返回指向向量vectorObject最后一个数据元素的迭代器 |
vectorObject.erase(loc) |
删除当前向量loc位置数据元素,返回下一个数据元素位置 |
vectorObject.erase(start,end) |
删除从start到end区间的元素,包含start不包含end,并返回下一个数据元素位置 |
vectorObject.front() |
返回向量中第一个数据元素 |
vectorObject.insert(pos,elem) |
当前向量中pos位置插入元素elem,并返回新数据的位置 |
vectorObject.insert(pos,n,elem) |
当前向量中pos位置插入n个elem数据元素,不返回任何值 |
vectorObject.insert(pos,start,end) |
当前向量中pos位置处插入区间在start到end之间的数据元素,包含start但不包含end,无任何返回值 |
vectorObject.max_size() |
返回当前向量中最大数据量,即向量的最大长度 |
vectorObject.pop_back() |
删除当前向量最后一个数据元素 |
vectorObject.push_back(elem) |
当前向量尾部添加一个数据元素 |
vectorObject.rbegin() |
返回一个逆向队列的第一个数据元素 |
vectorObject.rend() |
返回一个逆向队列的最后一个数据元素 |
VectorObject.reserve() |
设置当前向量合适的最小容量 |
vectorObject.resize(num) |
重新设定当前向量的长度 |
vectorObject.size() |
返回当前容器中实际数据元素个数 |
v1.swap(v2) |
呼唤向量v1与v2的数据元素 |
operator[] |
重载下标操作符,用于访问指定向量中的元素 |
双端队列deuqe公开方法接口说明
接口方法名称 |
基本功能说明 |
d.assign(n,elem) |
n个elem元素取代当前队列容器中元素 |
d.assign(first,end) |
迭代器first到end区间的元素取代当前队列中元素 |
d.at(n) |
访问当前队列n位置处的元素,并返回该元素 |
d.back() |
返回当前队列尾部元素 |
d.begin() |
返回当前队列第一个元素的迭代器 |
d.clear() |
清空当前队列中所有元素 |
d.empty() |
判断当前队列是否为空,如果为空则返回true |
d.end() |
返回当前队列中最后一个元素的迭代器 |
d.erase(first,end) |
删除当前队列迭代器first到end所指区间的元数据 |
d.erase(iter) |
删除当前队列迭代器iter所指位置元素 |
d.front() |
返回当前队列起始位置元素 |
d.insert(iter,elem) |
当前队列迭代器iter位置处插入元素elem |
d.insert(iter,first,end) |
将迭代器first到end区间的元素插入到当前队列iter所指位置 |
d.insert(iter,num,elem) |
将num个elem元素插入到当前队列iter所指位置处 |
d.max_size() |
返回当前队列容器当前最大容量 |
d.pop_back() |
删除当前队列中最后一个元素 |
d.pop_front() |
删除当前队列中第一个元素 |
d.push_back(elem) |
当前队列的尾部添加元素elem |
d.push_front(elem) |
当前队列的头部添加元素elem |
d.rbegin() |
返回当前队列反向的指向首元素的迭代器 |
d.resize(num,elem) |
将当前队列大小调整为num,并且使用元素elem初始化容器 |
d.size() |
返回当前队列的元素个数 |
d.swap(deque) |
交换当前队列与deque队列的内容 |
list容器公开接口方法说明
接口方法名称 |
基本功能说明 |
assign(n,value) |
用n个元素值value替换当前链表中元素 |
assign(firstIter,endIter) |
用迭代器firstIter到endIter区间内的元素替换链表中元素 |
back() |
返回当前链表最后一个元素的引用 |
begin() |
返回指向当前链表首个元素的迭代器 |
clear() |
清空当前链表中所有元素 |
empty() |
判断当前链表中元素是否为空,为空则返回true |
end() |
返回指向当前链表最后一个元素的迭代器 |
erase(iter) |
删除当前链表中指示器iter指向的元素 |
erase(firstIter,endIter) |
删除当前链表迭代器firstIter到endIter区间内的元素 |
front() |
返回当前链表第一个元素的引用 |
insert(iter,value) |
当前链表中迭代器iter所指位置插入元素value |
insert(iter,num,value) |
当前链表中迭代器iter所指位置插入num个元素value |
insert(iter,firstIter,endIter) |
当前链表中迭代器iter所指位置插入区间firstIter到endIter之间的元素 |
max_size() |
返回当前链表最大容量,即当前链表可存放元素最大个数 |
pop_back() |
删除当前链表中最后元素 |
pop_front() |
删除当前链表中首元素 |
push_back(value) |
当前链表尾部添加元素value |
push_front(value) |
当前链表首部添加元素value |
rbegin() |
返回当前链表反向的首元素迭代器 |
remove(value) |
删除当前链表中所有值为value的元素 |
删除容器指定元素 |
|
rend() |
放回指向当前反向链表最后一个元素的指示器 |
resize(num,value) |
调整当前链表,使得当前链表为num个元素,并且将元素初始化为value值 |
reverse() |
反调当前链表中元素的顺序 |
size() |
返回当前链表中元素个数 |
sort() |
根据默认排序方式,对当前的链表中元素排序 |
sort(method) |
根据当前给定的模式,对当前链表中元素排序 |
swap(listValue) |
当前链表与listValue链表内部元素互换 |
unique() |
删除当前链表中重复元素 |