• For 循环中省略了测试条件时,将认为条件为true。
  • clock_t为系统时间的类型名的别名,因此无论系统时间是long 还是 unsigned long,都可以用clock_t声明。CLOCKS_PER_SEC定义了系统时间与秒的换算关系。
  • typedef#define的区别是define在声明多个变量时候只能拿别名替换一次,如果遇到#define byte char*然后用byte a,b声明两个变量,就会变为char* a,b。这就是预处理器的作用——讲代码做一些自动的“复制粘贴”。
  • C++11开始提供了基于范围的for循环,主要用于循环容器变量内部的值。

    1
    2
    3
    4
    for(int x: {2, 3, 4, 5, 6})
    {
    cout<<x<<endl;
    }
  • 三种不同的输入字符的方法进行比较(==以后应该单独开一个博客写==)

    • cin忽略空格和换行符,即使输入了也不会读取。发送给cin的输入被存到缓冲区,只有在用户按下回车后,输入的内容才会发送给程序。
    • cin.get(ch)将读取一行输入,然后将其赋值给ch。这种输入方式仍然将输入先存到缓冲器,按下回车后发送给程序。
  • UNIX通过ctrl+D在键盘模拟文件尾条件。
  • 如果要想修改函数外的值,一定要在声明的时候将该参数声明为引用,或者传递该参数的地址。
  • 因为C++支持输入输出的重定向,所以如果输入的是文件,我们就需要检测文件的EOF(end of file)。如何检测呢?最常见的方法是:

    1
    2
    3
    4
    5
    6
    cin.get(ch);
    while(cin.fail()==fail)
    {
    ...
    cin.get(ch);
    }
  • 更高效的方法是:

    1
    2
    3
    while(cin.get(ch){
    ...
    }
  • 因为cin.get(ch)的返回值是cin,而cin会在需要bool值的位置自动返回bool量,如果成功则为true

  • EOF是一个已经定义好的常量,如果用cin.get()函数,那么直接把新读取的字符与EOF做比较就可以了。注意:有些时候不允许将char类型与EOF作比较,那时需要强制类型转换到int
  • 赋值语句的值为左操作数的值
  • cin.get(ch)更加符合面向对象的原则,可以将多个调用串联起来,因为每次cin.get(ch)都会返回一个cin对象,所以cin.get(ch1).get(ch2)是合法的。
  • 当每一行初始化的数组长度不同时(主要指的是char数组,即字符串),可以将长度不同的字符串组成的数组初始化为char指针数组。
  • cin忽略空格、换行符和制表符。