1,#include<stack> stack<int/char...> s.empty() s.push() s.pop()
2,冒泡排序n-1趟。
3,动态分配内存耗时间
4,*********************qsort使用方法 sort使用方法********************************
一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp);
其中第一个参数是参与排序的
数组
名(或者也可以理解成开始排序的地址,因为可以写&s[i]这样的表达式);
第二个参数是参与排序的元素个数;
第三个参数是单个元素的大小,推荐使用sizeof(s[0])这样的表达式;
第四个参数就是让很多人觉得非常困惑的比较函数啦,关于这个函数,还要说的比较麻烦...
我们来讨论cmp这个比较函数(写成cmp是我的个人喜好,你可以随便写成什么,比如qcmp什么的).典型的cmp的定义是int
cmp (const void *a,const void *b);
返回值必须是int,两个参数的类型必须都是const void *,那个a,b是我随便写的,个人喜好.
假设是对int排序的话,如果是升序,那么就是如果a比b大返回一个正值,小则负值,相等返回0。
double型数组升序cmp的写法是
int cmp(const void * a,const void * b)
{
return((*(double*)a-*(double*)b>0)?1:-1);
}
int数组升序cmp的写法是
int cmp(const void *a,const void *b)
{
return(*(int *)a-*(int *)b);
}
5,***************STL *******************
STL建在编译系统里。**************C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。************
算法部分主要由
头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些
模板类,用以声明
函数对象。
容器部分(数据结构)主要由头文件<
vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。对于常用的一些容器和容器适配(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系
-
向量(vector) 连续存储的元素<vector>
-
列表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>
-
双队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>
-
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>
-
多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
-
栈(stack) 后进先出的值的排列 <stack>
-
队列(queue) 先进先出的执的排列 <queue>
-
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>
-
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
-
多重映射(multimap) 允许键对有相等的次序的映射 <map>
迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。
迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了
迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的
元素分配
存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是
模板类allocator,它负责产生所有容器中的默认分配器。