运算符相关知识

  • 对于/和%,c++11中对于(-m)/n,m/(-n)都等于-(m/n),对于(-m)%n等于-(m%n),m%(-n)等于m%n。
  • 在输出语句中用条件运算符要加括号,因为优先级较低,如:cout << ((grade < 60) ? "fail" : "pass");
  • 位运算符:关于符号为的处理没有明确的规定,所以强烈建议仅将位运算符用于处理无符号类型。

链表中倒数第k个节点

描述

输入一个链表,输出该链表中倒数第k个结点。

解析

第一种办法可以先求出链表长度,然后求正数第len+1-k个节点,但是这样浪费了时间,因为可以在一次遍历的情况下得到倒数第k个,使用两个指针p1,p2,然后让p2和p1距离为k-1,然后依次增加p1和p2,直到p2为链表最后一个节点。需要注意k<=0和链表长度不够这两种情况。

类相关概念

  • 面向对象5大基本原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)。
  • 可变数据成员:一个可变数据成员永远不会是const,即使它是对const对象的成员。因此,一个const成员函数可以改变一个可变成员的值。如:

数组与指针

数组的大小必须在编译的时候就要确定;数组不允许拷贝和赋值,如:

1
2
3
int a[] = { 0, 1, 2};
int a2 = a; //错误
a2 = a; //错误

关于小数在计算机中的表示

  • 规则:整数部分,除二取余,倒序排列;小数部分,乘二取整,顺序排列。比如将6.6转化为二进制,方法如下:
    整数部分:
    6除以2得3余0
    3除以2得1余1
    1除以2得0余1
    所以6的二进制表示就是110