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则可将其简单化,往往只要几行就可以搞定。而与此同时,见到的题目也愈加繁琐,果然接触的知识越多见识到的题目就越丰富。