C++与STL再回顾

来源:互联网 发布:中信建投手机软件 编辑:程序博客网 时间:2024/05/29 15:17

因为暑假和秋季学期学习太过不认真,以至于至今对一些基础性质的东西尚有许多疑问,虽然平时做题没什么影响,可总还是个隐患。今天就再回头看一看C++与STL里面的一些基本知识,在短时间内把这些东西复习一,同时也把以前没搞懂的地方好好梳理一下。(后悔当初没认真啊,要不然现在不会这么弱了T_T)

按照条目把仅针对自己而言需要记的知识点列出来吧:

(1).C++引用特性

(2).string类相关的有一个<sstream>库里面的stringstream可以创建字符串流(神奇的东西),创建之后可以用像读取一样cin再次读取,只不过速度很慢,具体用法如下:(神奇)

  stringsstream s(stringline);  while(s>>x) sum+=x;
(3).最好用const int max=10005; 来代替原来的#define maxn 10005 。

(4).初识 lower_bound函数,本来还以为是很高大上的东西,原来是和sort一个级别的STL里面的函数,一口老血喷出来(还是我孤陋寡闻了,连这些都不知道=_=)。

lower_bound函数是在左开右闭的区间内用二分查找寻找指定元素的位置并且返回下标,这是在已经排序的前提下,如果没有排序就不一定了,它返回的是大于等于指定数值的元素的下表,如果找不到就返回数组最后一个元素的位置+1,(已经越界),它的具体的用法为:

int p=lower_bound(a,a+n,x)-a;

意思是在数组a的a[0]到a[n-1]范围内寻找大于等于x的元素,如果寻找到,返回这个元素的数组下标,如果没有找到,返回n。这个函数可以应用到寻找元素位置,当然是在已经排序的基础上。(查到了一个漏,赚到了)

(5)不定长数组 vector,虽然在学习的过程中多次听说,可是用倒还真的一次也没用过,(我活到了今天也真是个奇迹=-=)。OK,今天好好弄懂一下免得以后又被看做孤陋寡闻(虽然真的很孤很寡。。。)

vector是一个模板类,里面封装了很多操作,它就相当于一个可以改变长度的数组,并且用很多神奇的函数可以调用,具体我就不写了网上到处都有。常用的有v.size(); v.resize(x); v.push_back(); v.pop_back();,除此之外还有很多神奇的东西,看来以后要多用一用了解一下了。

(6).set集合,和vector数组类似是一个模板类。只不过实现效果它更类似于数学中的集合,它会把放进去的元素自动去重,并按照从小到大排序,只不过循环遍历的时候需要用到一个迭代器比如:

for(set<int>::iterator i=a.begin();i<=a,end();++i);

这就是STL里STL里面的迭代器,完成对set集合中元素的遍历。OK,以后具体用到具体搜索感觉吧。

(7).map映射,像是高级版本的数组,通过key到value产生关联关系,甚至可以对下标(不算是下标,准确来说是key)赋值“string”类型的值,并且也会自动排序,这个只能在应用时慢慢熟练了,知道可以做什么以后肯定会经常使用了。

(8).STL竟然自带的有栈!!竟然自带的有!!!我勒个去我去面壁思过去,略。队列!略。优先队列嘛,在<queue>里面,通过priority_queue<int> pq,优先权限为数值越大的优先级越高,top()用于取出优先级最高的元素。必要的时候可以自定义结构体定义优先方法作为伪函数。定义就变成了priority_queue<<int>,cmp> pq。


好吧,看到这里基本的知识就已经差不多了,关于vector,set,map,stack,queue(priority)这些模板类的灵活运用还得多靠实战练练才能长久记下来~~~~加油加油~

1 0
原创粉丝点击