• C++ Primer Plus 笔记第五章


     

    for循环的组成部分:

       1. 设置初始值。

       2. 执行测试,看看循环是否应当继续进行。

       3. 执行循环操作。

       4. 更新用于测试的值。

    表达式和语句:

       表达式:任何值和任何有效的值和操作符的组合都是表达式。每个C++表达式都有值。

       语句:所有表达式加上分号,都可以成为语句。有的没有意义。

    副作用和顺序点:

       副作用:指在计算表达式时对某些东西(存储在变量中的值)进行了修改。

       顺序点:程序执行过程中的一个点,进入下一步之前将确保对所有副作用都进行了评估。

    前缀和后缀格式:

    1 for (n = lim; n > 0; --n)
      . . .;
    2 for (n = lim; n > 0; n--)
      . . .;

       因为表达式(--n和n--)中的值均为被使用,只存在副作用。两条语句最终效果相同。

       执行效率上有略微的差别,前缀版本效率较高。

    递增/递减操作符和指针:

       前缀递增、前缀递减和解除引用操作符的优先级相同,以从右向左的方式进行结合;

       后缀递增和后缀递减的优先级高于前缀操作符 ,从左到右的方式结合;

    double arr[5] = {21.1, 32.8, 23.4, 45.2, 37.4};
    double *pt = arr;           // pt指向arr[0],to 21.1
    
    ++pt;              // pt指向arr[1],to 32.8    
    
    *++pt;             // *(++pt) 23.4
    
    ++*pt;             // ++(*pt) 24.4
    
    (*pt)++;            // 25.4 pt仍指向arr[2]
    
    *pt++;             // 后缀操作符'++'的优先级更高,所以'++'的操作符用于pt,*pt++的值为25.4,pt指向arr[3]的地址

    组合赋值操作符

       eg:   +=  /=  -=  *= :

        将结果赋给左侧操作数

    关系表达式:

       C++提供6种关系操作符来对数字、字符(ASCII码)和string类对象进行比较(不能用于C-风格字符串):

        操作符      <       <=        ==     >       >=        !=            

        含义         小于        小于或等于    等于     大于       大于或等于     不等于

    C-风格字符串比较:

       strcmp() 函数接收两个字符串地址作为参数,参数可以是指针、字符串常量或者字符数组名。

         strcmp(a,b) 头文件cstring:

          如果两个字符串相同,该函数返回零;

          如果a > b,返回一个正数;

          如果a < b,返回负数  

        char字符变量可以使用递增操作符和递减操作符,因为char类型实际上是整型。(ch++,ch--)

    比较string类字符串:

       sting类字符串,类的设计能使用关系操作符进行比较;

    While循环:

       while循环没有初始化和更新部分的for循环,只有测试条件和循环条件:

        while ( test_condition )

          body

       与for循环一样,while循环也是一种入口条件循环

    for与while:

       for与while本质相同;

       使用for循环来为循环计数,for循环允许将所有相关信息—初始值、终止值和更新计数器放在一个地方;

       在无法预知循环将执行的次数时,程序员常使用while循环

    等待一段时间:编写延时循环

       clock():返回程序开始执行后所用的系统时间,

        问题一:clock() 返回的时间不一定是秒;

        问题二:函数的返回类型下某些系统上可能是long,unsigned long或其他类型

       头文件ctime提供了这些问题的解决方法:

        解决问题一:定义符号常量:CLOCK_PER_SEC  每秒钟包含的系统时间单位数

        解决问题二:将clock_t作为clock() 返回类型别名,把变量声明为clock_t

       waiting.cpp

     1 #include <iostream>
     2 #include <ctime>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     cout << "Enter the delay time, in seconds: ";
     8     float secs;
     9     cin >> secs;            
    10     clock_t delay = secs * CLOCKS_PER_SEC;    
    11     cout << "staringa
    ";
    12     clock_t start = clock();
    13     while(clock() - start < delay)
    14      .
    15      .
    16      .
    17     cout << "done a
    ";
    18     return 0;
    19 }

       改程序以系统时间为单位(而不是秒)计算延迟时间,避免了在每轮循环中将系统时间转换为秒

    类型别名:

       C++为类型创建别名的方式有两种:

       使用预处理器: #define BYTE char            // 将BYTE声明为char类型别名

       使用typedef:    typedef char byte;  

        通用格式:typedef typeName aliasName;  // 将aliasName声明为typeName类型的别名 

             typedef char* byte_pointer;       // 将byte_pointer声明为 char指针别名

       typedef是一种更加的选择——有时候也是唯一的选择

       注意:typedef 不会创建新类型,只是为已有的类型创建别名

    do while循环:

       do while 是出口条件循环,先执行循环体,再判定测试表达式,决定是否继续执行循环;

        eg:

          do

          {

            cin >> n;

           } while( n != 7);

         程序必须先进入循环体获得输入。

    循环和文本读取:

       使用原始的cin进行输入:

       程序清单    testin1.cpp

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     char ch;
     7     int count = 0;
     8     cout << "Enter characters; enter # to quit: 
    ";
     9     cin >> ch;
    10     while( ch != '#')
    11     {
    12         cout << ch;
    13         ++count;
    14         cin >> ch;
    15     }
    16     cout << endl << count << "characters read
    ";
    17     return 0;
    18 }

         cin在读取char值时(cin >> ch),与读取其他基本类型一样,忽略空格和换行符;

         操作系统回显输入:see ken run#really fast  <Enter>;

         测试程序回显输入:seekenrun;

          发送给cin的输入被缓冲,回车后,输入内容被发送给程序

    使用cin.get(char)进行补救:

       字符读取程序要检查每个字符,包括空格、制表符和换行符。cin所属的iostream类中包含成员函数cin.get (ch) 读取输入中的下一个字符赋给变量ch;

       替换 textin1.cpp 中 cin >> ch :

       

     1 #include<iostream>
     2 using namespace std;
     3  
     4  int main()
     5 {
     6      char ch;
     7      int count = 0;
     8      cout << "Enter characters; enter # to quit: 
    ";
     9      cin.get(ch);
    10      while( ch != '#')
    11      {
    12          cout << ch;
    13          ++count;
    14          cin.get(ch);
    15      }
    16      cout << endl << count << "characters read
    ";
    17      return 0;
    18 }

        头文件 iostream 将 cin.get (ch) 函数原型的参数声明为引用类型,因此该函数可以修改其参数的值

    cin.get 函数重载:

       C++支持被称为函数重载的OOP特性——允许创建多个同名函数,参数列表不同

       cin.get ( name, ArSize ):编译器使用接受参数 char* 和 int 版本;

       cin.get (ch):编译器使用接收一个参数 char 版本 ,返回一个cin对象; cin.get(ch1) .get(ch2);

       cin.get():不接收任何参数的成员函数返回输入中的下一个字符,ch = cin.get (),将字符编码作为 int 值返回 

    文件尾条件EOF:

       while ( cin.fail () == false )             // 检测EOF

       常见的字符输入做法:

        cin.get (ch);

        while ( cin.fail() == false)  or  while ( !cin.fail() )         or   while ( cin.get( ch) )

        {

          .  .  . 

          cin.get ( ch );

        } 

       cin.get( char ) 返回值是一个cin对象,iostream类提供一个将istream对象转换为bool值的函数

      

       

       

  • 相关阅读:
    Hdu 3564 Another LIS 线段树+LIS
    利用ESLINT进行js 语法检查,以及局部安装时遇到的一些坑
    操作系统杂谈
    算法杂谈
    前端杂谈
    操作系统复习
    vue之——从彩笔的进步之路
    一丢丢学习之webpack4 + Vue单文件组件的应用
    计蒜客 2017复赛 百度地图导航
    electron打包之真的恶心
  • 原文地址:https://www.cnblogs.com/kidycharon/p/9660407.html
Copyright © 2020-2023  润新知