使用stl可以大大提高算法设计的效率和可靠性。

  1. 概述:

STL 即Standard Template Library标准模板类库。

是标准c++库的子集

通用,强大

  1. 构成:

container:容器(储存元素)

algorithm:算法(操作元素)

iterator:迭代器(类似指针)

容器container:是一种数据结构

顺序容器:

1)

vector向量容器

2)

string 类似于上面的函数,有个别的例外。

3)

Dequen双端队列容器

是链表和字符串的调和产物,是多个连续的队列块。

4)list链表容器

是一个双链表类模板,只能使用++ - -来使用迭代器

2. 关联容器:

关联容器中每个元素都有一个关键字(key),通过key来储存和读取原损失,这些关键词可能于元素在容器中的位置无关,所以关联容器中不提供顺序容器中的front(),push_front(),pop_back()等操作,可以实现快速搜索(运用了分类的数据结构)

1)set(集合容器)/multiset(多重集合容器)

区别:

set中元素的关键字是唯一的,而multiset的关键字可以不唯一。默认情况下会对元素按照升序排列。

而如果需要集合中的元素可以重复那么可以使用multiset。

又由于set没有重复的元素,所以如果添加的元素相同,那么不添加;而multiset可以有重复的元素,所以在删除的时候,会将其全部删除然后返回一个被删去元素个数。

特殊的函数有:

count(k)返回k在set中的次数。

find(k)如存在返回该元素的迭代器,否则返回end();

upper/lower_bound(k)返回关键字>k或>=k的第一个元素的迭代器

2)map(映射容器)/multimap(多重映射容器)

映射是实现关键字和值的各系的储存结构,可以用key来访问value

实现关键字和值关系的对应,而map是一一对应;而multimap是

同时map/multimap容器中的key和value是pair类型(不是像set一样两者都是key类型)pair是一个结构体声明如下:

struct pair
{ T first;//对应key值
  T second;//对应value值
}

按照key升序排列,以红黑树的形式。map支持【】;而multimap不允许【】(在使用map[key]的时侯如果不存在该key值那么就以其为关键字插入一个元素。

三种方式插入:

#include<bits/stdc++.h>
using namespace std;
int main(){
    map<char,int> mym;
    mym['a'] = 1;
    mym.insert(pair<char,int>('b',2));
    mym.insert(map<char,int>::value_type('c',2));
    map<char,int>::iterator it;
    for(it = mym.begin();it!=mym.end();++it){
        cout<<it->first<<it->second;
    }

    return 0;
}

适配器容器:

是基于其他的容器实现的容器,在底层容器实现适配器容器的功能,实际上可以将其作为一个一般的容器去使用。后进后出(只能从顶部出入)

1)stark 栈容器:

后进后出默认的底层容器是deque,(当然也可以指定其他的容器作为stark的底层容器)

只有简单的pop()出栈;push()入栈;empty();size()

2)queue队列容器:先进先出。

插入的元素在队尾,pop()出的元素在队首。

3)priority_queue(优先队列容器)

可随意顺序入队列但是一旦进入就会被排序(按照值的大小排序)

在这个里面使用pop()来找到队伍最前面的(也是最大值的)