STL简单应用(一)

STL的基本结构:

STL 是 C++ 通用库,由迭代器、算法、容器、仿函数、配接器和配置器(即内存配置器)组成。

一、栈(Stack)

头文件:#include < stack>
定义:stack< data_type> stack_name;
如:stack < int> s;
操作:
empty() — — 返回bool型,表示栈内是否为空(s.empty())

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

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

在这里插入图片描述
pop()— — 移除栈顶元素(s.pop();)

push(data_type a)— —向栈压入一个元素a (s.push(a);)
在这里插入图片描述栈是一种先进后出的数据结构

例:

#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int main(){
stack<int>s;
s.push(1);       //向栈内压入元素1,2,3
s.push(2);       
s.push(3);       
cout <<"Top:"<<s.top()<<endl;  //输出栈顶元素
cout <<"Size:"<<s.size()<<endl;  //输出栈内元素个数
s.pop();    //移除栈顶元素3        
cout <<"Size:"<<s.size()<<endl;
if(s.empty())     //判断栈内是否为空
{
cout <<"Is empty"<<endl;}
else{
cout <<Is not empty"<<endl;}
return 0;
}

二、队列(queue)

头文件:#include < queue>

定义:queue < data_type>queue_name;
如: queue < int> q;

操作:
empty()— — 返回bool型,表示queue是否为空(q.empty())

size() — — 返回queue内元素个数(q.size())

front() — —返回queue内的下一个元素(q.front())

back() — —返回queue内的最后一个元素(q.back())

pop() — —移除queue中的一个元素(q.pop();)

push(data_type a)— —将一个元素a置入queue中(q.push(a))
在这里插入图片描述
队列是一种先进先出的数据结构

例:

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int main(){
queue<int> s;
s.push(1);
s.push(2);
s.push(3);
cout <<"Front:"<<s.front()<<endl;  //输出元素1
cout <<"Back:"<<s.back()<<endl;  //输出元素3
s.pop();    //删除元素1
cout <<"Size:"<<s.size()<<endl; 
cout <<"Front:"<<s.front()<<endl;  //输出元素2
cout <<"Back:"<<s.back()<<endl;  //输出队列中的最后一个元素3
return 0;
}

三.vector(动态数组)

头文件:#include < vector>

定义:vector < data_type> vector_name;
如:vector < int> v; vector< double> v; vector< string> v;

操作:
empty() — — 返回bool型,表示vector是否为空(v.empty())

size() — —返回vector内元素个数(v.size())

push_back(data_type a)将元素a插入最尾端

pop_back()将最尾端元素删除

v[i]类似数组取第i个位置的元素(v[0])

vector可以很好解决的数组越界问题,并且可以在数组的任意位置添加一个元素和删除一个元素

插入元素:v.insert(v.begin()+i,a) 在第i+1个元素前面插入a;

删除元素:v.erase(v.begin()+2) 删除第3个元素

v.erase(v.begin()+i,v.end()+j) 删除区间[i,j-1];区间从0开始

清空:v.clear()

例:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
vector<int> a;
for (int i=0;i<5;++i){
a.push_back(5-i);
}
cout<<"Size:"<<a.size()<<endl;
a.pop_back();
a[0]=1;   //直接给第0个元素赋值为1
cout <<"Size:"<<a.size()<<endl;
for(int i=0;i<(int)a.size();++i){   //强制将元素个数转换为整型
cout <<a[i]<<","<<endl;
}
cout <<endl;
return 0;
}

四、sort(排序)

头文件:#include < algorithm>
sort (begin,end);
sort (begin,end,cmp);

例:
int num[]={1,5,6,2,9};

  1. sort (num,num+5); //默认从小到大排序
    2)bool cmp(int a,int b){ return a>b;}
    sort(num,num+5,cmp);
    //从大到小

sort在vector中的使用

#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
	int a[10];
	vector <int> b;
	for (int i=0;i<5;i++)
	{
		cin >>a[i];
		b.push_back(a[i]);  //给向量b输入元素
	}
	sort(a,a+5);
	sort(b.begin(),b.end());  //begin返回第一个元素位置,end返回第一个无效元素的位置,begin,end为迭代器对象,用来储存元素的位置
	for (int i=0;i<5;i++)
	cout <<a[i]<<" ";
	cout <<endl;
	for (int i=0;i<5;i++)
	cout <<b[i]<<" ";
	return 0;

五、优先队列(priority_queue)

头文件:#include <queue>
定义:priority_queue <data_type> priority_queue_name;
如:priority_queue <int> q;  //默认是大顶堆(最大值在前)

操作:
	q.push(elem)	将元素elem置入优先队列
	q.top()		返回优先队列的下一个元素
	q.pop()		移除一个元素
	q.size()	返回队列中元素的个数
	q.empty()	返回优先队列是否为空

在这里插入图片描述优先队列是一个有权值观念的queue,会优先将极大值或者极小值排在最前面,极大值称为大堆,极小值成为小堆

例:

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
#define pow2(a) ((a)*(a))     //宏定义,a²=a*a
#define dist2(x,y)(pow2(x)+pow2(y))  //宏定义,距离²=x²+y²
struct coord{
	int x,y;
	const bool operator<(const coord &b)const{   //重载运算符<,当前点和代入点b进行比较,若当前点距离的平方和大的话则进行交换
		return (dist2(x,y)<dist2(b.x,b.y);
	};
int main(){
priority_queue<coord> s;   //将结构体放入优先队列中
coord a;
a.x=3,a.y=2;
s.push(a);    //输入(3,2)=13
a.x=1,a.y=2;
s.push(a);    //输入(1,2)=5
a.x=2,a.y=2;
s.push(a);    //输入(2,2)=8
cout <<"Size:"<<s.size()<<endl;
cout <<"Top:"<<s.top().x<<","<<s.top().y<<endl;  //输出大顶堆(3,2)
s.pop();   //删除大顶堆(3,2)
cout <<"Top:"<<s.top().x<<","<<s.top().y<<endl;  //输出此时的大顶堆(2,2)
return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值