摘要: (1)为了运用stack,你必须包含头文件:#include (2)在头文件中stack定义如下: namespace std{ template > class stack; } 第一个template参数代表元素型别,带有默认值的第二个参数用来定义stack内部存放元素所用的实际容器,缺省采用deque。之所以采用deque而非vector,是因为deque移除元素时会释放内存并且不必在重新分配时复制全部元素。实际上stack只是很单纯的把各项操作转化为内部容器的对应调用,你可以使用任何序列式容器来支持stack,只要它们支持back(),push_back(),pop_back() 阅读全文
posted @ 2013-08-28 16:05 一生挚爱 阅读(455) 评论(0) 推荐(0) 编辑
摘要: (1)使用set/multiset之前必须包含头文件:#include (2)namespace std{ template , class Allocator = allocator > class set; template , class Allocator = allocator > class multiset; } 只要是assignable、copyable、comparable的型别T都可以成为set或multiset的元素型别。 set/multiset的排序准则必须是strict weak ordering其意义是:1必须是反对称的,对判断式op而言,如果op( 阅读全文
posted @ 2013-08-28 16:04 一生挚爱 阅读(283) 评论(0) 推荐(0) 编辑
摘要: (1)为了运用priority_queue,你必须包含头文件:#include (2)在头文件中priority_queue定义如下: namespace std{ template , class Compare = less > class priority_queue; } 第一个template参数代表元素型别,带有默认值的第二个参数用来定义priority_queue内部存放元素所用的实际容器,缺省采用vector。第三个参数定义出“用以搜索下一个最高优先元素”的排序准则,缺省下是以operator <作为比较标准。实际上priority_queue只是很单纯的把各项操作 阅读全文
posted @ 2013-08-28 16:03 一生挚爱 阅读(186) 评论(0) 推荐(0) 编辑
摘要: (1)使用map/multimap之前必须包含头文件:#include 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)namespace std{ template , class Allocator = allocator > > class map; template , class Allocator = allocator > > class multimap; } 第一个template参数被当作元素的key,第二个当作元素的value。key/value必须具备assignable和copyable性质,对排序而言key必 阅读全文
posted @ 2013-08-28 16:02 一生挚爱 阅读(279) 评论(0) 推荐(0) 编辑
摘要: (1)要运用STL的算法,首先必须包含头文件,某些STL算法用于数值处理,因此被定义于头文件(2)所有STL算法都被设计用来处理一个或多个迭代器区间,第一个区间通常以起点和终点表示,至于其他区间,多数情况下你只需提供起点便足以,其终点可以自动以第一个区间的元素数量推断出来,调用者必须保证这些区间的有效性。STL算法采用覆盖模式而非安插模式,所以调用者必须保证目标区间拥有足够的元素空间,当然你也可以运用特殊的安插型迭代器将覆盖模式改变为安插模式。(3)尾词_if:如果算法有两种形式,参数个数都相同,但第一形式的参数要求传递一个值,第二形式的参数要求传递一个函数或仿函数,那么尾词_if就派上了用场 阅读全文
posted @ 2013-08-28 16:01 一生挚爱 阅读(177) 评论(0) 推荐(0) 编辑
摘要: (1)使用vector之前必须包含头文件:#include(2)namespace std{ template > class vector; }vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质。第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator。(3)在末端附加或删除元素时,vector的性能相当好。可是如果你在前端或中部安插或删除元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动到另一个位置,而每一次移动都得调用assignment操作符(4)vec... 阅读全文
posted @ 2013-08-28 15:59 一生挚爱 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。 在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了对树状数组有个形 象的认识,我们先看下面这张图。 如图所示,红色矩形表示的数组C[]就是树状数组。这里.. 阅读全文
posted @ 2013-08-28 10:19 一生挚爱 阅读(255) 评论(0) 推荐(0) 编辑