第四章

来源:互联网 发布:软件售后工程师 编辑:程序博客网 时间:2024/05/21 10:08
17年2月21日 22:24:10


4.1数组
     char a[len] = {.....}  
     len = sizeof(a)/sizeof(char);

     C++11数组初始化方法:
          ①可省略‘=’如:double earing[4] { 1.2e4, 1.6e4, 1.8e4, 2.0e4};
          ②不在大括号内写任何东西,相当于把所有元素置零,如:float a[10] = {};
          注意:禁止缩窄转换
                    如:char a[4] = {'h', 'i', 11211,'\0'};     此时11211溢出
                          long p[] = {25,92};     错误,float降为int为缩窄操作

4.2字符串
     1. char boss[8] = "BOZO";
           后三个均为‘\0’

     2. cin遇到空格,也作为结束标志

     3. getline:读取整行,并抛弃换行符      <istream>
               cin.getline(name,20);     (存储输入行的数组名,读取的字符数但实际只读19位)
        get:读取整行,但把换行符留在输入队列,所以可以用来读取换行符

        由于cin.get()和cin.getline()都返回一个cin对象,所以可以如下使用:
               cin.get(name,ArSize).get();          cin.getline(name1,ArSize).getline(name2,ArSize);

          getline使用起来简单一些,但get输入更加仔细,检查错误更加简单
          检查get的下一个输入字符,如果是'\n'说明输入了一行,如果是字符,说明数组已满
          get读取空行后会设置失效位,接下来输入会阻塞,可以用cin.clear()来回复

4.3 string类简介
  1. C++98添加的string类    <string>  std中
  2. 可以使用列表初始化为string对象初始化
  3. 常用运算(以下str均为对象):
    1. str1 = str2;      str3 = st1 + str2;     str1 += str2;   str1.size();
    2. getline(cin,str1);    将cin作为参数,指出去哪里查找输入,string类的大小会随输入自动调整
    3. 此时的getline不是类方法      

4.4 结构体
     结构体中的位字段:struct student
                                   {
                                        int age : 4;          age占4位     多数情况下,在低级编程中使用
                                   };

4.5共用体用于节省内存

4.6 枚举
     可以代替一部分const功能,默认情况下第一个为0
     C++中枚举有取值范围:
               上限:2^N - 1 >= 最大枚举值
               下限:若最小枚举值>= 0, 则下限为0,否则:-(2^N - 1) =< 最小枚举值;
                如:最大枚举值为:101,最小枚举值为:-6     则范围:-7~127(枚举变量可以取这个范围内的任意整数值)

4.7 指针和自由存储空间
     1.OOP强调在运行阶段进行决策。(运行阶段指的是程序正在运行时),这方式提高了代码的灵活性
     2. int *p1,p2;     此时p2是int
     3. 地址的大小为4字节,但仍取决于计算机
     4. int *ptr = 0xb800 0000;     在C99之前,这样赋地址是可以的,但在C++中,要写:ptr = (int *)0xb800 0000;
     5. 为一个数据对象(为数据分配的内存块)获得并指定分配内存:
               typeName *pointer_name = new typeName;
          new从堆或自由存储区上分配空间,当内存耗尽,分配失败时,抛出异常(以前是返回NULL)

     6. new和delete的使用注意事项:
          ①不要使用delete释放非new内存,但对NULL释放是安全的
          ②不要使用delete释放同一块内存两次
          ③new [ ] 应该用delete [ ] 来释放
          ④new分配的空间,应该使用delete来释放

          type_name *pointer_name = new type_name[num_elements];

4.8 指针、数组和指针算术
     1.指针变量自加1,增加的是自身的步长
     2.[ ] 等价于 *( )
     3.数组名被解释为其第一个元素的地址,而对数组名取地址时,得到的是数组的地址
     4.C++不能保证字符串字面值被唯一的存储,可能有多个副本,也可能只有一个
     5.new和delete管理了一个内存池,在C++中被称为自由存储空间或堆
          但new和delete的相互影响可能导致占用的自由存储区不连续,使得跟踪新分配内存位置困难

4.10 数组的替代品
     1.vector     
          头文件:<vector>      
          名称空间:std
          使用格式:vector<typeName> vt(n_elem);          //n_elem为长度且可以是变量,vt为变量名
          说明:动态分内空间,不知道n_elem时,长度为0

     2.array
          头文件:<array>
          名称空间:std
          使用格式:array<typeName,n_elem> arr;          //此时,n_elem不能为变量
          说明:在栈上分配空间

     vector和array的成员函数:at( ),会在运行时捕捉非法索引
          如:a2.at(1) = 2.3;      等价于     a2[1] = 2.3;
     begin()和end()能确定边界    
     
0 0
原创粉丝点击