零基础学C++之高级篇二
零基础学C++之高级篇二
STL标准模板库
STL(Standard Template Library)是为了标准化组件提供类模板进行范型编程,STL技术是对原有C++技术的一种补充,具有通用性好、效率高、数据结构简单、安全机制完善等特点。
序列容器
向量类模板
向量vector是一种随机访问的数组类型,提供了对数组元素的快速、随机访问,以及在序列尾部快速、随机插入和删除操作,它是大小可变的向量,在需要时可以改变大小。
使用向量类模板需要创建vector对象,创建vector对象有以下几种方法:
std::vector name; //空对象
std::vector name(size); //具有size元素个数的对象
std::vector name(size,value); //具有size元素个数的对象,并将元素初值设置为value
std::vector name(myvector); //用现有的myvector创建一个对象,复制
std::vector name(first,last); //创建在指定范围内的向量
vector对象的主要成员函数
函数 | 说明 |
---|---|
assign(first,last) | 用迭代器first和last所管辖范围内的元素替换向量元素 |
assign(num,value) | 用value的num个副本替换向量元素 |
at(n) | 返回向量中第n个位置元素的值 |
back() | 返回对向量末尾元素的引用 |
begin() | 返回指向向量中第一个元素的迭代器 |
capcity() | 返回当前向量最多可以容纳的元素个数 |
clear() | 删除向量中所有元素 |
empty() | 如果向量为空,返回true |
end() | 返回指向向量中最后一个元素的迭代器 |
erase(start,end) | 删除迭代器start和end所管辖范围内的向量元素 |
erase(i) | 删除迭代器i所指向的向量元素 |
front() | 返回对向量起始元素的引用 |
insert(i,x) | 把值插入向量中由迭代器i所指明的位置 |
insert(i,start,end) | 把迭代器start和end所管辖范围内的元素插入到向量中由迭代器i指明的位置 |
insert(i,n,x) | 把x的n个副本插入到向量中由迭代器i指明的位置 |
max_size() | 返回向量的最大容量 |
pop_back() | 弹出向量最后一个元素 |
push_back(x) | 把值x放在向量末尾 |
rebegin() | 返回一个反向迭代器,指向向量末尾元素之后 |
rend() | 返回一个反向迭代器,指向向量起始元素 |
reverse() | 颠倒元素的顺序 |
resize(n,x) | 重新设置向量大小,新元素的初始值为x |
size() | 返回向量的大小,元素的个数 |
swap(vector) | 交换两个向量的内容 |
双端队列类模板
双端队列deque是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候修改其自身的大小,主要完成标准c++数据结构中队列的功能。
其创建方法与创建序列类模板对象方法一致,成员函数大部分与序列类模板一致,不同的如下:
函数 | 说明 |
---|---|
pop_front() | 弹出双端队列第一个元素 |
push_front(x) | 把值x放在双端队列开始 |
链表类模板
链表list即双向链表容器,它不支持随机访问,访问链表元素要指针从链表的某个端点开始,插入和删除操作所花费的时间是固定的,和该元素在链表中的位置无关。list在任何位置插入和删除都很快。
创建链表对象的方法与创建vector对象方法一致,其主要成员函数大部分与vector一致,不同的如下:
函数 | 说明 |
---|---|
pop_front() | 弹出链表第一个元素 |
push_front(x) | 把值x放在链表开始 |
关联式容器
关联式容器是STL提供的容器的一种,其中的元素都是经过排序的,它主要通过关键字的方式来提高查询的效率,关联容器包括set、mutliset、map、mutlimap和hash table。
set类模板
set类