欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;

}