STL总结

21 篇文章 0 订阅

1、栈(stack)

栈只能操作最顶端元素。

头文件: #include <stack>

定义: stack<data_type> stack_name;

操作: empty() -- 返回bool型,表示栈内是否为空 (s.empty() )

            size() -- 返回栈内元素个数 (s.size() )

            top() -- 返回栈顶元素值 (s.top() )

            pop() -- 移除栈顶元素(s.pop(); )

            push(data_type a) -- 向栈压入一个元素 a(s.push(a); )

2、队列(queue)

底端加入元素,顶端取出元素。

头文件: #include <queue>

定义: queue <data_type> queue_name;

操作: 类似于“栈”

优先队列(priority_queue)

自动依照元素的权值排列,权值最高排在前面。且采用的是二分法。

头文件: #include <queue>

定义: priority_queue <data_type> priority_queue_name;

操作: q.push(elem) 将元素elem置入优先队列

            q.top() 返回优先队列的下一个元素

            q.pop() 移除一个元素

            q.size() 返回队列中元素的个数

            q.empty() 返回优先队列是否为空

3、动态数组(vector)

动态数组与数组的区别:数组的长度为常量且容易出现数组越界现象从而导致超时,而动态数组能够自动增长。

4、sort排序

sort排序属于算法的一种,位于#include <algorithm>(算法)头文件中(与之前的栈、队列等区分)。

sort(begin, end);  //此处end指的是第一个非法元素

生成排列

头文件: #include <algorithm>

bool next_permutation(begin, end);  //改变区间内元素的顺序,产生下一个排列。

bool prev_permutation(begin, end);  //产生前一个排列。

upper_bound(begin, end, value);   //返回>value的元素的第一个位置。

lower_bound(begin, end, value);   //返回>=value的元素的第一个位置。

此处举一个全排列的例子:

#include<iostream>
#include<cstring>
#include<algorithm> 
using namespace std; 
int main()
{
	int a[4],t=0;
	while(cin>>a[0]>>a[1]>>a[2]>>a[3])
	{
		if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0) break;
		if(t) cout<<endl;
		t=1;
		int flag=1, b;
		do
		{
			if(a[0]==0) continue;
			if(flag)
			{
				cout<<a[0]<<a[1]<<a[2]<<a[3];
				flag=0;
			}
			else if(b==a[0]) cout<<" "<<a[0]<<a[1]<<a[2]<<a[3];
			else cout<<endl<<a[0]<<a[1]<<a[2]<<a[3];
			b=a[0];
		}
		while(next_permutation(a,a+4));
		cout<<endl;
	}
	return 0;
}

5、set和multiset 简单应用 & map和multimap

set和map一样是关联式容器

set:只保存关键字的容器

map:保存关键字和一个对应值

而set和map前加multi:关键字可重复出现

此处引入迭代器:

迭代器举例:

       multiset <int> :: iterator pos;

       for(pos = s.begin(); pos != s.end(); pos++)

 

总结:

本节课学习了一些STL的基本知识,发现了其本身的很多优势,从前很多需要写一长串代码的东西,通过使用STL则可将其简单化,往往只要几行就可以搞定。而与此同时,见到的题目也愈加繁琐,果然接触的知识越多见识到的题目就越丰富。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值