STL总结

一、整体理解
STL 是指 C++ 标准模板库,利用模板类和模版函数实现快速的调用运算。
二、内容
1.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] )
2.sort
头文件: #include < algorithm >
定义:
sort(begin, end);
sort(begin, end, cmp);

int num[10] ;
1) sort(num, num + 5);//默认升序,区间左闭右开[0,4)

2) bool cmp(int a, int b)
   {
	   return a > b;
   }//降序
   sort(num, num + 5, cmp); 

3.优先队列(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() 返回优先队列是否为空
4.生成排列
头文件: #include < algorithm >
定义:
bool next_permutation(begin, end);
改变区间内元素的顺序,产生下一个排列。
bool prev_permutation(begin, end);
产生前一个排列。
(左闭右开)
5.upper_bound 和 lower_bound
头文件: #include < algorithm >
定义:
upper_bound(begin, end, value);// 返回>value的元素的第一个位置。

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

int num[10] ;
lower_bound(num, num + 6, 2)//num + 1
upper_bound(num, num + 6, 2)//num + 3

6.set 和 multiset
(都是按特定顺序排序,但是multiset可以允许元素重复而set不允许元素重复)
在这里插入图片描述
头文件: #include < set >
定义:set <data_type> set_name;

set  < int > s;//默认由小到大排序

操作:
s.clear() – 一个迭代器,移除全部元素,将整个容器清空。
s.size() – 一个迭代器,返回容器大小。
s.empty() – 一个迭代器,返回容器是否为空。
s.count(elem) – 一个迭代器,返回元素值为elem的元素的个数。
s.lower_bound(elem) – 一个迭代器,返回 元素值>= elem的第一个元素位置。
s.upper_bound(elem) – 一个迭代器,返回 元素值 > elem的第一个元素的位置。

s.begin() – 返回一个双向迭代器,指向第一个元素。
s.end() – 返回一个双向迭代器,指向最后一个元素的下一个位置
7.map和multimap
(利用元素的键值自动排序,map的所有元素都是pair,pair的第一个元素被视为键值,第二个元素为实值。map不允许两个元素有相同的键值,但multimap可以。)
头文件: #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来说非0即1。
m.erase(pos) 移除迭代器pos所指位置上的元素。
直接元素存取:
m[key] = value;
查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。
m.insert(elem) 插入一个元素elem
a)运用value_type插入

	map<string, float> m;
	m.insert(map<string, float>:: value_type ("Robin", 22.3));

b) 运用pair<>

	m.insert(pair<string, float>("Robin", 22.3));

c) 运用make_pair()

	m.insert(make_pair("Robin", 22.3));

8.迭代器举例:

multiset <int> :: iterator pos;
for(pos = s.begin(); pos != s.end(); pos++)
{

}

三、感受
3.17
写程序发现一件很气愤的事情,我自己列举的测试用例都能通过,但是提交到oj上就是wa,检查不出哪里错了是个大问题,这样和没写的结果都是一样的。到现在试了7道wa了4道,真是菜渣了。
3.19
wa了5道,后来ac了三道,那一个多小时觉得脑子好像有点好使了,拖了好几天的问题也检查出来了,果然是状态的问题。
3.22
这又是一个很悲惨的故事,昨半宿正想着问题,我竟然睡着了!!!我这个不争气的家伙!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值