c++Primer笔记(三,四,五,六,七)

 

第三章:标准库类型。

1.任何存储string的size操作结果的变量必须为string::size_type 类型。特别重要的是,不要把size的返回值给一个int 变量。比int要大2 倍。索引也是string::size_type类型滴。

2.在cctype.h文件中定义了这些判断单个字符的函数:是否字符,是否标点,是否大写等等:tolower(c) toupper(c) isalnum(c).......测试失败返回0,

3.虽然c++把c的头文件,去掉了.h,加上了c, cstdio --> stdio.h  , 其实他们还有一点点不同滴,那就是:cstdio中的变量函数都是定义在std命名空间中滴,而.h则可以直接使用无需引入std空间。

4.vector不是一种数据类型,而只是一个类模版,vector<int>这才是一个具体的类型哦。

5.所有的标准容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作,所以我们应该多用迭代器。每个容器都定义了begin()  end() 操作。

6.const_iterator 只读迭代器,const iterator迭代器只读。 迭代器支持 :it + n    it1 - it2 这2个操作。

7.bitset类型。位操作类型。88页

 

第四章:数组和指针。

1.只有在强调速度时,才使用数组和指针,一般最好使用标准库东东。

2.数组与vector的区别:

  .数组长度是固定的,不提供获取其容量的大小,不能动态添加元素,因此比vector更难调试和使用。

3.NULL是定义在cstdlib头文件中滴。属于预处理东东,不再std范围内哦。直接使用即可。

4.int i=43; long *l = & i;  这是错误滴,指针必须同类型,没有兼容这一说。

5.c++支持2个指针的减法操作,返回值应该用:prtdiff_t类型啦接收,定义在 cstddef头文件中。该类型只能保证在同一个数组中的减法操作。嘻嘻。

6.注意:const int ic =1 ; int * const cpi=&ic; 这是错误的。因为ic是不可以修改的,但是* const 是可以修改元素滴,所以出错罗。

7.strlen()是基于\0来判断大小的,所以没有\0结束的字符数组使用strlen(),是不可预料滴。

8.int *p=new int[a]; 在堆中的数组可以是动态的变量哦。  、

9.delete[] 表示释放一组空间,数组必须加上[]来释放。

10.str.c_str(); 是string的返回c风格数组的字符串函数。

 

第五章:表达式。

1.在程序中是用前置自增是一个好习惯。因为如果遇到复杂的迭代器的++,后缀的加加会花费更大的代码。

2.为什么叫c++,而不是++c,因为c++表示 ,返回c,然后才加加,说明与c语言完全兼容哦。  这里引用了c中的后置++来说明问题。

3.注意:a为数组时:size(a)可以探出其大小,a为指针时:size(a)只能返回4个字节。

4.int *p=new int;   没有初始化0 ,int *p=new int() ; 初始化为0了。

5.悬垂指针。悬垂else

 

第六章:语句。

1.预处里4个有用与调试的东东:__FILE__ ___LINE__  __TIME__  __DATE__  文件名 , 行号,编译时间,编译日期。

2.try catch() throw .

 

第七章:函数。

1.c++引用代替了c的指针和变量形参。

2.实参是对形参的初始化。 哦。

3.数组作为形参时,是当作指针传递过去的,并不会检查其数组大小。

4.即使返回void的函数都是有返回值的,只是在语句最后会隐士一个return ; 空语句罢了。

5.不能返回局部对象的引用哦。  返回引用或者指针,必须返回所指向的那个区域是在全局区所存储的数据。

6.内联函数对于编译器来说,只是一个建议,编译器可以忽略那个建议。

7.const成员函数不能修改该对像,除非指定了:mutable  ,并且与同名的非const函数可以重载哦。 编译器会自动识别滴。

 

你可能感兴趣的:(c++Primer笔记(三,四,五,六,七))