STL的一些知识

①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); )

②队列
queue是一种先进先出(First In First Out, FIFO)的数据结构,从底端加入元素,从顶端取出元素。

头文件: #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); )

③Vector-动态数组。

头文件: #include <vector>
vector <data_type> vector_name;
vector <int> v;
empty() – 返回bool型,表示vector是否为空 (v.empty() )
size() – 返回vector内元素个数 (v.size() )
push_back(data_type a) 将元素a插入最尾端
pop_back() 将最尾端元素删除
v[i] 类似数组取第i个位置的元素(v[0] )
如果对v 内部进行排序
sort(v.begin(),v.end());
vector是动态空间,有其内部的空间分配机制来及时调整空间大小,
其实就是vector把申请空间,移动数据,释放原来的空间等操作封装在内部,
不需要用户去处理。

④优先队列(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() 返回优先队列是否为空
priority_queue <data_type> priority_queue_name;
如:priority_queue q;//默认是大顶堆
上边这个是排的最大值
priority_queue<int, vector, greater > q;
这个才是最小值得在栈顶
注意 q.empty()如果队列为空 返回true 反之返回false

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

lower_bound(begin, end, value);
返回>=value的元素的第一个位置。
这个可以用来给数组去重操作
vector<int>a;
int main()
{
	int n; cin >> n;
	for (int i = 0; i < n; i++)
	{
		int t; cin >> t;
		a.push_back(t);
	}
	sort(a.begin(), a.end());
	a.erase(unique(a.begin(), a.end()), a.end());
	for (int i = 0; i < a.size()&&i<=500; i++)
	{
		cout << a[i] << " ";
	}
}

⑥Map
提供了很好一对一的关系

头文件: #include <map>
map <data_type1, data_type2> map_name;
	如:map <string, int> m;//默认按string由小到大排序
m.size() 返回容器大小
m.empty() 返回容器是否为空
m.count(key) 返回键值等于key的元素的个数
m.lower_bound(key) 返回键值等于key的元素的第一个可安插的位置
m.upper_bound(key) 返回键值等于key的元素的最后一个可安插的位置
m.begin() 返回一个双向迭代器,指向第一个元素。
m.end() 返回一个双向迭代器,指向最后一个元素的下一个	位置。
m.clear() 讲整个容器清空。
m.erase(elem) 移除键值为elem的所有元素,返回个数,对	于map来说非01。
m.erase(pos) 移除迭代器pos所指位置上的元素。
直接元素存取:
m[key] = value;
查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)

⑦pair

1     pair<int, double> p1;  //使用默认构造函数
2     pair<int, double> p2(1, 2.4);  //用给定值初始化
3     pair<int, double> p3(p2);  //拷贝构造函数
4.pair<int, double> p1;  //使用默认构造函数
p1.first = 1;
p1.second = 2.5;
cout << p1.first << ' ' << p1.second << endl;
5.用sort 对pair 排序时 , 默认对 first 进行升序排列 , 
当first相同时, 对second 进行升序排列 ,
 如有需求时 也可以自己写一个cmp 实现对其别的要求的排序 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值