ACM是一个对我们计算机专业是一个含金量很高的比赛,每一个对编程有一定兴趣的人来说一定不会放过这个很好的学习机会,虽然说,我错过了寒假中的学习机会,但开学后,机会总还是有的。我们第一个章节主要学习STL,就是标准模板库,通过合理的运用STL我们一是可以节省大量的步骤,从而节省程序运行的时间,二是可以实现我们很多不便实现的功能得以实现。
第一个就是Stack,即栈,这种数据结构就象是一个死胡同,只能在栈顶进行数据的操作。
栈的头文件#include<stack>,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<queue>;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<int >v,
empty() -- 返回bool型,表示vector是否为空 (v.empty() )
size() -- 返回vector内元素个数 (v.size() )
push_back(data_type a) 将元素a插入最尾端
pop_back() 将最尾端元素删除
v[i] 类似数组取第i个位置的元素(v[0] )
第四个就是sort函数,能够将输进的数据按照一定的顺序排列,一般sort默认的是从小到大排列,当然也可以通过更改返回值来改变它的排列方式。
头文件#include <algorithm>;sort(begin, end);
bool cmp(int a, int b)
{
return a > b;
}就是更改的方式;
第五个就是生成排列
头文件: #include <algorithm>
bool next_permutation(begin, end);改变区间内元素的顺序,产生下一个排列。
bool prev_permutation(begin, end);产生前一个排列。
end为最后一个元素的下一个位置。
第六个是upper_bound 和 lower_bound的运用,这两个其实很简单,前一个是找不符合条件的第一个位置,后一个则是找符合的第一个位置,重点是位置,而不是数值。
第七个就是set和multiset容器,两个都能将数据按照一定的顺序排序,只不过区别是set能够将容器中的数据去重,而multiset不存在这项功能。
set容器的难点是重载小于号bool operator < (const new_type &a)const
{
if(x != a.x) return x < a.x;
return y < a.y;
}了解会用即可。
s.insert(elem) -- 安插一个elem副本,返回新元素位置,就是插入数据
s.erase(elem) -- 移除与elem元素相等的所有元素,返回被移除 的元素个数。
s.erase(pos) -- 移除迭代器pos所指位置上的元素,无返回值。
s.clear() -- 移除全部元素,将整个容器清空。
第八个是map和multimap容器,这个容器就是相当于数学中的映射,将一个数据关联到另一个数据,map容器中两个数据不能一样,而multimap中的数据则可相同。
m.begin() 返回一个双向迭代器,指向第一个元素。
m.end() 返回一个双向迭代器,指向最后一个元素的下一个 位置。
m.clear() 讲整个容器清空。
m.erase(elem) 移除键值为elem的所有元素,返回个数,对 于map来说非0即1。
m.erase(pos) 移除迭代器pos所指位置上的元素。
m.size() 返回容器大小
m.empty() 返回容器是否为空
m.count(key) 返回键值等于key的元素的个数
m.lower_bound(key) 返回键值等于key的元素的第一个可安插 的位置
m.upper_bound(key) 返回键值等于key的元素的最后一个可安 插的位置
最后一个则是优先队列,与队列不同的是优先队列能将在队列中的数据进行排序,用的是二叉树的方式,保证最大的值永远在第一位,但是,中间的数值则不能保证其单项的排列方式。
我现在对STL了解的还不够充分,不能自由从容地运用STL,因此,使用的类型我还在摸索,但是经过这两个星期的学习,我了解到了编程这个东西是真的有一定的难度,但是学习有难度的知识并会自如地运用正是我们学习的道理。在之后我会更加努力的学习,体验编程的快感。
ACM学习总结
最新推荐文章于 2021-04-25 07:19:02 发布