c++复习(1)(系列文章,持续更新,持续记录)

  1. 运算符重载: 返回值 operator运算符(形参){}
  2. 求定积分就是制定步长step,然后把用f(起始点+offset)*step;
    1. 实际就是看做切分为矩形面积求和。
    2. 还可以使用梯形面积法,simpon法(这个有公式可查)
  3. 格式控制:fixed<<setprecision(n)<<数字
  4. 使用特殊占位符表示“删除该元素”,不用频繁释放内存以及调整结构
  5. 冒泡排序是将相邻的两个数比较大小交换
  6. >>是istream类中重载的一个运算符,其返回结果就是istream类对象的引用,当输入的数据与数据参数类型不匹配时,会返回NULL。
    1. 如while(cin>>a) 当输入和a的类型不匹配时,循环结束
  7. system("PAUSE");手动设置断点,或者加上一个cin来保留窗体
  8. 多态:使用基类的指针指向派生类的对象的地址
  9. 堆栈应该有的操作:(先进后出)
    1. push压栈
    2. pop出栈,要记录尾端的数据
    3. 判断栈是否为空
    4. 判断栈是否满了
    5. 模板:Stack<t, n>s;
  10. vector 的函数:
    1. erase(it)
  11.  deque 的函数:
    1. pop_front()
    2. pop_back()
  12. getline如果读入的是空行,则读入的第一个字符是\0
  13. 格式使用的例子:
    1. setiosflags(ios::left)<<setw(n) //注意设置靠左,靠右时,如果前面设置过要先撤销,再重新设置:resetiosflags(ios::right)
    2. 注设置完一种格式,要么后面的数据有自己的输出格式,否则需要撤销之前的格式设置
    3. '\t' << fixed << setprecision(0)
    4. 设置输出为科学技术法
  14. 注意一些重复使用的变量尤其是需要开启空间的,尽可能提出循环外,否则容易溢出报错。
  15. 修改文件名称:
           
     #include<stdio.h>//rename函数的头文件
     rename(old_name,new_name )
  16. 将一个类对象输入输出二进制文件(.bin):
    1. 输入:输出流.write((char*)&temp, sizeof(temp));
    2. 输出:输入流.read((char*)&good[i], sizeof(good[i]));
    3. 注意打开文件需要指定ios::binary
  17. C++对ends的处理时一样的,都是在缓冲区插入'\0'然后刷新,之所以在不同的系统下的显示情况不同是因为,windows和linux对'\0'的处理方式不同,在windows中会输出一个空格,而linux下则不会有什么输出。
  18. 可以使用二分法寻找函数的根
  19. 成员函数为重载运算符时,参数为类对象
  20. 如果想要交换链表中的两个节点,直接完全交换两个节点的内容即可,否则指针太复杂
  21. 将输入倒序输出:
    1. 递归
    2. 链表:将每个输入都插入到头指针处
  22. 只有整型才能强制类型转换为枚举类型
  23. 写递归函数之前,可以先把递归式写出来(数学形式)
  24. #include<algorithm>头文件中的一些函数记录:
    1. next_permutations函数:使用前把数组进行升序排序,调用之后可以得到所有全排列的结果,参数为进行全排列的:起始点,终止点。
    2. copy函数:
      1. 参数:要复制的数据的起始位置和结束位置,以及要复制到的起始位置
      2. copy(list, list + m + 1, ostream_iterator<t>(cout, " "));//最后一个参数是设置每一个被复制的元素后跟着的字符,此处将元素复制到输出流
    3. prev_permutation函数:和(1)的效果一样,但是在使用该函数前应该先将数据进行降序排序
    4. is_sorted函数:参数:起始点,终止点
    5. count(a, a + 13, 17)函数:计数17
    6. mismatch函数:
      1. 参数:第一个数组进行比较的起始地址,第一个数组进行比较的终止地址,第二个数组进行比较的起始地址
      2. 作用:找到两个数组第一对不同的元素,以键值对的形式返回。
    7. fill(a + 2, a + 7, 10)函数:填充10
  25. #include<numeric>头文件中的一些函数记录:
    1. iota(a + 2, a + 7, 100);//在指定范围的数值上加一个常数
    2. inner_product(b, b + 3, c, 0);//此函数有四个参数:第一个向量的起始,结束位置,第二个向量的起始位置,内积值的初始值
  26.  pair<t,t> q;//mismatch的返回值是pair类型的,pair是一种类模板,用两个参数
  27. “使用26个字母中的前n个字母输出所有子集”程序的记录:只用三个指针思路实现的是错误的,因为比如a,b,d 即first和begin是连续的,begin和end之间是断开的,并且随着元素个数增加,中间挖洞的情况会更多,三个指针无法得到正确结果
  28.  秦九韶算法:从里层开始向外乘:乘从最高次幂的系数开始,成一个x,加上下一项的系数
  29. 当递归会因为溢出而卡顿时,将其转为循环,直接放到main函数中执行即可。
  30. 利用switch来赋值的都可以用map来转化
  31. class note;//使用一个类来生成对应的对象前必须有其声明
  32. 如果使用数组来实现栈,删除指定元素时可用的方法:
    1. 使用一个临时栈来保存不用删除的元素,找到要删除的元素删除弹出之后,再把临时栈里的元素压入栈中即可。
    2. 用另一个数组标识对应位置的元素是否被删除,但需要定期清理,否则如果后续不断压栈会导致溢出。
    3. 不用数组,使用链表实现
  33.  完全二叉树:节点从上至下,从左至右放置
  34. 对于一棵二叉树, 设叶子节点数为n0, 度为1的节点数为n1, 度为2的节点数为n2。度为2的节点有2个分支, 度为1结点有1个分支, 度为0的节点有0个分支,则n0 = n2 + 1(公式1)
    1. 证明:
      (度为2的节点有2个分支, 度为1结点有1个分支, 度为0的节点有0个分支)
      总分支数=2*n2 + n1
      另外分支数 = n0 + n1 + n2 - 1 (每个结点上面对应一个分支,除了根节点上面没有分支)
      因此 2*n2 + n1 = n0 + n1 + n2 - 1 得 n0 = n2 + 1
    2. 假设n为完全二叉树的结点总数, 则有 n=n0+n1+n2(公式2)
      结合公式 1和2 有 n0=(n-n1+1)/2(将n2用n0表示带入公式2解出)
      又因为 n1 = 0 或者 n1 = 1 只有这两种情况(完全二叉树的性质呀--只有一个分支的节点要么有, 要么没有, 剩下的全是两个分支的节点和0分支的叶子节点)
      实际就是除以2之后向上取整
      当n为奇数时(即度为1的节点为0个) n0= (n+1)/2    //因为n0和n2的奇偶性相反
      当n为偶数(即度为1的节点为1个) n0= n/2
      n1,n2,都可以求了
    3. 所以一般我们的做题思路就是:
先看总节点个数, 是奇还是偶, 
            奇数,可知 n1 = 0; 再计算n0,  
            此时n0, n1都知道了,  n2 = n-n1-n0; 
            偶数同上

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值