读《C++Primer》第三天

来源:互联网 发布:张秀硬笔行楷 知乎 编辑:程序博客网 时间:2024/04/28 04:07

     觉得自己的编程能力一塌糊涂,就决定把《C++Primer》好好看看,学到了许多自己以前没有注意的地方,觉得蛮有收益的,于是分享下……或许这些在那些大侠看起来都很不起眼,却是我一天的喜悦!

14、vector不是一种数据类型,而是一个类模板。可以用来定义任意多种类型;

    如:vector<int>  ivec;

          vector<string> svec;

    而vector对象的重要属性就是在于可以在运行时高效的添加元素。

15、指针和引用的比较

    引用和指针都可以间接访问另一个值,但他们之间有重要的区别:

    第一个区别:引用总是指向某个对象:定义时没有初始化是错误的;

    第二个区别:给引用赋值修改的是该引用所关联的值,而不是使引用与另一个对象关联。

16、创建动态数组

    每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或者堆(heap)。而动态分配数组时,只需要指定类型和数组长度,不必为数组对象命名,new表达式返回指向新分配数组的第一个元素的指针:

           int *pia = new int[10];

还允许动态分配空数组

           size_t n = get_size();

           int *p = new int[n];

           for(int *q = p; q != p+n; ++q)

            /*process the array*/

然后要释放掉内存  delete [] pia;

 

17、在C++语言中允许将多个赋值操作写在一个表达式中:

     int ival, jval;

     ival = jval = 0;   //OK

18、只有在必要的时候才使用后置操作符

 因为 后置操作符必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。对于更多的复杂迭代器类型,这种额外工作可能花费更大的代价。

19、语句的作用域

在条件表达式中定义的变量必须初始化,该条件检验就是初始化对象的值:

如 while(int i = get_num())

          cout<<i<<endl;    //error

20、悬垂else:所有语言的if语句都普遍存在着潜在的二义性。这种情况往往称为悬垂else。通过将else匹配给最后出现的尚未匹配的if子句来解决这个问题。

21、关于switch子句

对于一个switch子句程序是从该点开始执行,并跨越case边界继续执行语句,知道switch结束或遇到break语句为止;

一个有趣的程序:

      switch(ch)

      {

            // alternative legal syntax

            case:'a'  case:'e'  case:'i'  case:'o'  case:'u' ;

            ++vowelCnt;      //统计元音字母的个数

             break;

      }