【C++篇】map和set的使用 set的声明如上,T就是set底层关键字(key)的类型。set默认要求T是支持比较大小的,如果不支持或者想按自己的比较方式走,可以传仿函数给第二个模板参数。set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数一般情况下是不需要传后两个参数的set底层是用红黑树实现的,增删查的效率为O(logN),迭代器遍历走的是中序遍历,所以是有序的map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型。
【C++】二叉搜索树 二叉搜索树又称二叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:• 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值。• 若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值。
C++篇之继承 1. 基类private成员在派⽣类中无论以什么⽅式继承都是不可⻅的。这⾥的不可见是指基类的私有成员 还是被继承到了派⽣类对象中,但是语法上限制派⽣类对象不管在类里面还是类外面都不能去访 问它。2,基类private成员在派⽣类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派⽣类 中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。3,实际上⾯的表格我们进⾏⼀下总结会发现,基类的私有成员在派⽣类都是不可见。
C++中【stack-queue】的使用介绍及模拟实现 1,队列queue遵循先进先出的原则,从容器一段插入元素,另一端提取元素。元素从队尾入队列,从队头处队列。2,队列queue作为适配器实现,和栈一样,底层用的也是双端队列—deque。3,底层容器可以是标准模板容器之一,比如vector,list,deque等,要求是这些容器可以是实现一下操作:empty:判断容器是否为空size:容器的元素个数front:返回对头元素back:返回队尾元素push_back:在队尾插入元素pop_front:在队头出元素,也就是删除队列中的头部元素。
C++中vector常用函数总结 vector可以理解为一个边长数组,可以存储不同的类型,int ,double,char,结构体等。也可以才能出STL标准容器,如set,string,vector等。
C++中string函数用法总结 string() //无参构造,初始化为空串string(const string& str) //用str拷贝构造string(size_t n,char c) //用n个字符c初始化string(const char* s,size_t n) //用字符串s的前n个字符初始化string(const string& str,size_t pos,size_t len=npos) //将字符串str,从下标pos位置开始,选取长度为len个的字符,来初始化。
排序的实现 思路:key为第一个位置下标,用cur遍历整个数组,开始时,prev指向第一个位置,cur指向prev+1位置,cur找小,找到比key位置小的 ,与prev下一个位置交换,cur找到大的++,直到遍历完整个数据。这种情况是在数据较小的情况下,如果数据较大,比如101,100,105,102,103,102这组数据,就需要开辟空间为105的数组,消耗太大了。思路:一组数据中,遍历一遍,选出最小的数和最大的数,分别放到第一个位置和最后一个位置,然后除这两个元素外,再将剩下的元素进行遍历选数,依次循环。
堆的时间复杂度分析 总结点个数N=2^0+2^1+...+2^(h-1)=2^h-1。那么就可以得出高度和节点个数的关系h=log(N+1)。最少情况下,N=2^0+2^1+...+2^(h-2)+1=2^(h-1),同样高度和节点个数的关系:h=logN+1;相减得:F(h)=2^(h-1)+2^1+2^2+...+2^(h-2)-2^0*(h-1)最多需要调整的次数:T(h)=2^1*1+2^2*2+...+2^(h-1)*(h-1)相减得:T(h)=2^h*(h-1)-2^1-(2^2+2^3+...+2^(h-1))
类和对象下 而有默认构造的,可以不用在初始化列表写,编译器会自动调用的默认构造进行初始化。6,总的来说,成员变量初始化尽量使用初始化列表。2,内部类是一个独立的类,它不属于外部类,不能通过外部类的对象去访问内部类的成员。2,每个成员变量在初始化列表只能出现一次,语法上可以理解初始化列表是成员变量初始化定义的地方。4,静态成员函数可以访问静态成员变量,但不能访问非静态的,因为没有this指针。5,非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。,这三类是必须在初始化列表进行初始化的,不能在函数体内初始化。