STL

STL

使用模板的程序设计法

将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,都不必重新实现数据结构,重新编写算法

标准模板库(STL)就是一些常用的数据结构和算法的模板的集合

容纳:可容纳各种数据类型的通用数据结构,是类模板

迭代器:可用于依次存取容器内元素

和指针类似,不同的是指针要定义

对数据结构进行封装,防止对其本身产生大的损坏

容器:

1.顺序容器

容器并非排序的,元素的插入位置同元素的值无关

vector,deque,list

vector动态数组,元素在内存连续存放,存取任何元素都能在常数时间完成

deque双向队列,元素在内存连续存放,存取任何元素都能在常数时间完成(次于vector)

list链表,不连续存放,存放常数时间

2.关联容器

元素是排序的,插入任何元素都按照相应的排序规则来确定位置,通常用红黑树实现

set(无重复元素),multiset(有),map,multimap

map<a,b>建立a->b的映射

map[a]=b

根据first值对元素从小到大排序,并根据first检索元素

image-20200203082228036

顺序容器和关联容器都有的成员函数

begin

end

rbegin

rend

erase

clear

image-20200203082411094

顺序容器中常用的成员函数

front

back

push_back

pop_back

erase

迭代器

用于指向顺序容器和关联容器中的元素

迭代器用法和指针类似

定义:

容器类名::iterator 变量名

迭代器++操作可以执行++操作,指向下一个元素

3.容器适配器

stack,queue,priority_queue

算法简介:

函数模板,大多数在定义

算法可以处理容器和数组

1.不变序列算法

2.变值算法

3.删除算法

4.变序算法

5.排序算法

6.有序区间算法

7.数值算法

next_permutation

for(int i = 1; i <= n; i ++) a[i] = i;
do
{
    for(int i = 1; i <= n; i ++)
    {
        printf("%d ", a[i]);
    }
}while(next_permutation(a + 1, a + 1 + n))

random_shuffle

原文地址:https://www.cnblogs.com/lcezych/p/12860529.html