3月13日一周学习总结

3月13日一周学习总结

STL简单应用

(以下顺序以个人理解应用程度由高到低排序)

sort

格式 sort(首地址,尾地址,排序方式)
排序方式默认为升序排序,可自己定义(若排序对象为string类型,则以字典序进行默认排序
如降序排序方式:

bool cmp(int a,int b)
  return a>b;

同时也可以对结构体进行排序
如先以x升序排序,若x相同后按y降序排列

struct str{int x,int y;};
bool cmp(str a,str b)
{if(a.x<a.x)
return true;
else 
   if(a.x=b.x)
     if(a.y<b.y)
       return true;
return false;

(做题常见的数组处理方法,绝大多数优化处理都要进行排序处理)

string类

string支持输入可变长度的字符串并可以对其进行操作,如:
访问单个字符,初始化,字符串之间的复制,连接,比较等,还可以判断是否为空。

string s;
s = "one"//赋值
string s1 = "two"//初始化
cout<<s.size<<endl;//输出长度
s.empty()//判断字符串s是否为空
s1+=s;//把s追加到s1后面

string类型的比较为字典序比较
(做题时使用次数较多,代码中多包含循环结构,如:

for(int i=0;i<s.size;i++)

可以对字符串中的元素进一步进行判断与处理)

unique

去重处理(并非删除重复元素,而是进行排序,将重复的放入数组末端,后返回重复数前一个元素的地址)
使用unique之前需要先进行排序,因为unique针对相邻元素
在这里插入图片描述

upper_bound和 lower_bound

格式:upper_bound(首地址,尾地址,目标元素)
返回大于目标元素的第一个位置
格式:lower_bound(首地址,尾地址,目标元素)
返回大于等于目标元素的第一个位置
(即lower_bound返回符合目标元素的第一个位置upper_bound返回最后一个符合目标元素的位置)

栈,队列以及优先队列

栈 Stack
格式:stack<类型> 栈名;
stack <int>s;
原则:先进后出,只有一个出口,只能对栈顶元素进行操作
操作:s.empty()–返回bool类型,判断栈是否为空
s.size()–返回栈的个数
s.top()–返回栈顶元素
s.pop()–移除栈顶元素
s.push(a)–向栈中压入一个元素a

队列 queue
格式:queue<类型>队列名;
queue<int>q;
原则:先进先出,尾进头出,地段加入元素,顶端取出元素
操作:q.empty()–返回bool类型,判断队列是否为空
q.size()–返回队列的个数
q.pop()–移除队列中的下一个元素
q.push(a)–向队列中压入一个元素a
q.front()–返回队列的下一个元素
q.back()–返回队列内的最后一个元素

优先队列 priority_queue
格式:priority_queue<类型>优先队列名;
priority_queue<int>p;
原则:权值最高的元素排在前面
操作:p.empty()–返回bool类型,判断队列是否为空
p.size()–返回队列的个数
p.pop()–移除队列中的下一个元素
p.push(a)–向队列中压入一个元素a
p.top()–返回队列的下一个元素

动态数组vector

个人对vector的理解是它可以开辟一个大小变化的数组,并能够对其内部元素进行操作
格式:vector <类型> 动态数组名称;
如:vector v;
操作:v.empty() – 返回bool型,表示vector是否为空
v.size() – 返回vector内元素个数
v.push_back(a) 将元素a插入最尾端
v,pop_back() 将最尾端元素删除
v[i] 类似数组取第i个位置的元素(v[0] )

set和multiset

个人对set的理解是set为一个集合,其中包含了不重复的元素,而multiset则可以包含相同元素,与其他容器相比拥有更快地查找速度
set中常用的方法
insert() 向set里面插入一个元素
begin()    返回set容器的第一个元素
end()      返回最后一个元素的下一个元素的索引,最后一个值为*(–s.end());
clear()    删除set容器中的所有的元素
empty()    判断set容器是否为空
max_size()   返回set容器可能包含的元素最大个数
size()      返回当前set容器中的元素个数
rbegin    返回的值和end()相同
rend()     返回的值和rbegin()相同

map和multimap

个人对于map的理解是一种可以标记元素的容器,其内部元素为pair,每个pair包含一个键值和实值,键值不允许重复,但在multimap中可以
map常用的方法
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
(迭代器类似指针)

本周学习感悟与收获

这周主要介绍的STL函数,其中sort和string在以往做题中使用较多,较为熟悉,而栈,队列,动态数组只是在参考代码中见到过,进行过了解但并未使用过,对其使用情况还是缺少认识,至于优先队列和set组合以及map则是从未见过使用的代码,对其了解程度更是浅薄,根据网上查找的文章进行了解后发现set和multiset使用的为平衡检索二叉树:红黑树,在其运算查找时会以二分的形式进行查找,因此其运算速度为log2级别的,将会缩短代码运行时间,而map关联容器,内部自建红黑树,但是目前对于数据结构方面的问题认识几乎为零,对于这两者的使用仍需继续研究。
这周除了对STL函数有了一个初步的认识之外,还在codeforces过了一道与括号法则有关的题目(这次没hacked)让我对于括号法则相关的题目有了大致的解题方向,设置一个计数器,每次出现左括号便加1,出现右括号则减1,最后判断完毕若计数器不等于0则说明不满足括号法则,反之满足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值