STL的常用容器
程序员文章站
2022-07-12 16:39:49
...
STL(standard template library 标准模板库)
组成:容器,算法,迭代器,容器适配器,函数对象,STL标准组件。
迭代器:对存储于容器中的数据进行处理时,迭代器能从一个成员移向另一个成员。他能按预先定义的顺序在某些容器中的成员间移动。(正是这么预定义顺序,成就了各种容器)对普通的一维数组、向量、双端队列和列表来说,迭代器是一种指针。
容器:
map:
用于实现映射,类似函数,提供一对一的数据处理。map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树)。这颗树具有对数据自动排序(默认从小到大)的功能,所以在map内部所有的数据都是有序的。
功能:
自建 key -> value 的键值对模式,key 和 value 可以是各种数据类型。
头文件:#include"map";
基本操作函数:
函数 | 功能 |
---|---|
begin() | 返回指向map头部的迭代器 |
end() | 返回指向map末尾的迭代器 |
clear() | 删除所有元素 |
count() | 返回指定元素出现的次数 |
empty() | 如果map为空则返回true |
erase() | 删除一个元素 |
find() | 查找一个元素 |
insert() | 插入元素 |
lower_bound() | 返回键值>=给定元素的第一个位置 |
max_size() | 返回可以容纳的最大元素个数 |
size() | 返回map中元素的个数 |
swap() | 交换两个map,两个容器所有元素的交换 |
set:
1、set中的元素都是排好序的
2、set集合中没有重复的元素(可以通过这个特点记录集合元素个数)
函数 | 功能 |
---|---|
begin() | 返回set容器的第一个元素的地址 |
end() | 返回set容器的最后一个元素地址 |
clear() | 删除set容器中的所有的元素 |
empty() | 判断set容器是否为空 |
max_size() | 返回set容器可能包含的元素最大个数 |
size() | 返回当前set容器中的元素个数 |
erase(it) | 删除迭代器指针it处元素 |
insert(a) | 插入某个元素 |
//POJ 3320
#include<cstdio>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
int a[1024];
int main()
{
int P,i,n;
while(~scanf("%d",&P))
{ set<int>s;
for(i=0;i<P;++i)
{
scanf("%d",&a[i]);
s.insert(a[i]);
}
n=s.size();//记录知识点的个数
int start=0,end=0,num=0,ans=P;
map<int,int>mp;//对应每个知识点出现的次数
while(1)
{
while(end<P&&num<n)
{
if(mp[a[end]]==0)
{
num++;
}
mp[a[end]]++;
end++;
}
if(num<n)
break;
ans=min(ans,end-start);
if(--mp[a[start]]==0)//有一个知识点出现的次数为0了,就是减少了一个知识点
num--;
start++;
}
printf("%d\n",ans);
}
}
栈
#include<iostream>
#include<stack> //栈的头文件
using namespace std;
int main(){
stack<int>s; //定义一个栈 : stack<数据类型>栈名称;
s.push(1); //从容器顶部插入一个元素,从s内部调用函数 :s.push(插入元素);
cout << s.empty() << endl; // 判断栈是否为空,空返回 1,非空返回 0 : s.empty();
cout << s.size() << endl; // 计算栈中的元素个数 : s.size();
cout << s.top() << endl; // 引用容器口的一个元素,并且可以对其进行运算: s.top();
s.top() += 3;
cout << s.top() << endl;
s.pop(); // 删除容器口的元素 : s.pop();
cout << s.empty() << endl;
}
队列
#include<iostream>
#include<queue>//队列的头文件
using namespace std;
int main(){
queue<int>s;//定义一个队列 : queue<数据类型>队列名称;
s.push(1);
s.push(2);
s.push(3);
cout << s.empty() << endl; // 判断队列是否为空,空返回 1,非空返回 0 : s.empty();
cout << s.size() << endl; // 计算队列中的元素个数 : s.size();
cout << s.front() << endl;// 引用队列头的一个元素,并且可以对其进行运算: s.front();
cout << s.back() << endl;// 引用队列尾的一个元素,并且可以对其进行运算: s.back();
s.front() += 2;
cout << s.front() << endl;
s.pop(); // 删除容器的第一个元素 : s.pop();
cout << s.front() << endl;
}
上一篇: mongodb自启动