复杂类型c++ prime plus 读后笔记

数组

数组:一种数据格式,能够存储多个同类型数据

数组声明:1、类型 2、数组名 3、数组中的元素数

Eg: typename array[arraySize]

arraySize:不能是变量,但可以用new()运算符避开

数组初始化规则:

  1. 提供的元素 <= arraySize
  2. Float array[50] = {0}
  3. Float array[ ] = {1,2,3}   此时 c++编译器将计算数组元素个数

C++11 新增规则:

  1. 初始化数组时,可以省略等号(=)

Eg:  int array[4]  {1,2,3,4}

  1. 可不在大括号里面包含任何东西

Eg:int array[4]  {}

  1. 列表初始化禁止缩窄转换(浮点数转换成整形)

字符串

定义:存储在内存的连续字节中的一系列字符

使用方法:

<1> char 方法:

               不是字符串

   是字符串

              字符串常量(字符串字面值):使用一个引号括起字符串

             

              使用单引号时,将把字符串的ASCII码值赋值给变量

              隐式地包括结尾的空字符

       注意:确定存储字符串的最短数组时,要把空字符算进去

<2>string 方法

使用标准头文件 #include<string>

与字符数组区别:可以将string对象声明为简单变量,而不是数组。类设计让程序能够自动处理string的大小。String对象更方便,也更安全。String类具有自动调整大小的功能,不会破坏数据

C++字符串初始化

       计算字符串长度:array_name.size()  或者  strlen(array_name)

面向行的输入:getline() 和 get()

 Getline()将丢弃换行符,而get()将换行符保留在输入序列中

getline()

意义:读取整行,它使用通过回车键输入的换行符来确认结尾。

  方法:cin.getline(数组名,字符数)

           #getline() 成员函数在读取指定数目的字符或遇到换行符时停止读取

  该函数有两个参数:

第一个参数用来输入行的数组的名称,第二个参数要读取字符数,还可以接收第三个可选参数

Eg: cin.getline(name,20) 

最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符     

get()

             因为get会将换行符保留在输入队列中,因此再次调用时看到的第一个字符便是换行符

Eg:

  

       解决办法:

              方法一:

cin.get(name, SIZE);

cin.get();

cin.get(dessert, SIZE);

        方法二:

cin.get(name, SIZE).get();

cin.get(dessert, SIZE).get();

可以这么写的原因:cin.get(name,ArSize) 返回一个对象,该对象随后将被用来调用get() 函数。类比可得: cin.getline(name1 , ArSize) . getline(name2 , ArSize) ;

注意:尽量使用 get()

混合输入字符串和数字:

  #  ( cin >> year) . get() ;  或者  ( cin >> year ) . get( ch ) ;

结构简介

介绍:结构是用户定义的类型,而结构声明定义了这种类型的数据属性

意义:同一结构可以存储多种类型的数据

创建步骤:1、定义结构描述(描述并标记能够存储在结构中的各种数据类型)

                2、描述创建结构变量(结构数据对象)

关键字struct  

标记成为新类型的名称  Person_information

列表存有 char、int、float,因此 Person_information结构含有三个成员

结构定义了指出新类型(Person_information)的特征

创建类型的变量:

成员运算符:( . ) 用来各个成员

结构声明位置的区别:

  1. 外部声明:可以被其后面的任何函数使用
  2. 局部声明:只能被该声明所属的函数使用

结构体初始化:(等号 = 是可以选择不加入的)

结构数组:

共用体

关键字:union  (用法与结构体相似)

概念:一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型

用途:当数据项使用两种或更多种格式(但不会同时使用)时,可以节省空间;常用于操作系统数据结构或硬件数据结构

注意:成员名称标识了变量的容量,由于共用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体长度为其最大成员的容量

枚举

关键字: enum  (用法与结构体相似)

举例:

用法:在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0,第二个枚举量的值是1,以此类推。可以通过显示地指定整数值来覆盖默认值、

设置枚举量的值:

  1. 可以使用赋值运算符来显示地设置枚举量的值
  2. 指定的值必须为整数,也可以只显示地定义其中一些枚举量的值
  3. 可以创建多个值相同的枚举量

枚举的取值范围:

       定义:首先找出上线,知道枚举量的最大值。找到大于最大值的最小的二进制的幂,并将它减1,eg: 101  à 127

                其次,计算下限,知道枚举量的最小值。如果它不小于零,贼取值范围下限为零;否则,与寻找上限相似,不过要加上负号

指针和自由存储空间

指针:

       用途:用于存储值的地址。因此,指针名表示地址

       (*)运算符:被称为间接值或解引用运算符,可以得到地址存储的值

Eg:假设manly是一个指针,则&manly表示一个地址,则*manly表示存储在该地址处的值。

      

声明和初始化指针:

       Typename*  指针名

注意:

  1. 指针变量不仅仅是指针,而且是指向特定类型的指针。double* num  和 int* name 是不同类型的指针
  2. 地址的长度或值既不能指示关于变量的长度或类型的任何信息,也不能指示改地址上有什么建筑物。一般来说,地址需要2或4字节,取决于计算机系统。

初始化:

  1. 声明语句中初始化指针。这种情况,被初始化的是指针,而不是它指向的值。例子中初始化的是p(而不是*p),将num的地址赋给p。

指针的危险:

       创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向数据的内存。因此,一定要在对指针应用解引用运算符(*)之前,使指针初始化。

使用new来分配内存:

       运用指针,在运行阶段分配未命名的内存以存储值

       格式:

Eg:

#new 的作用:程序员告诉指针需要哪种数据类型分配地址,new将找到一个长度正确的地址,并返回该内存块的地址。程序员的责任是将该地址赋给一个指针。

       数据对象:为数据项分配的内存块,它的范围比“变量”更为广泛。

       示例中,pn所指向的是一个数据对象

#new分配的内存块与常规变量分配的内存块区别:new分配的内存块在堆区,而常规变量分配的内存块在栈区。

注意:不要创建;两个指向同一内存块的指针,这将增加错误地删除同一内存块两次的可能性

使用new来创建动态数组:

  1. 静态联编:

在编译时给数组分配内存。这就意味着数组是在编译时加入到程序中,在编写程序时指定数组的长度

  1. 动态联编:

在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组长度(动态数组)。

Eg

使用动态联编:

使用new创建动态结构:

       步骤:创建结构和访问成员

  1. 创建结构

  1. 访问成员

运算符: (->)箭头成员运算符

        作用:可用于指向结构的指针

两种访问方法:

  1.                                             b.

                        

句点运算符和箭头运算符运用时机:

       句点:结构标识符是结构名

       箭头:标识符是指向结构的指针

使用delete释放内存:

       格式:delete 指针名;

       Eg:

示例中会释放pn指向的内存,但不会删除指针pn本身,可以将pn重新指向另一个新分配的内存块

#new和delete使用规则:

  1. 不要使用delete来释放不是new分配的内存
  2. 不要使用delete释放同一内存块两次
  3. new格式和delete格式对应(是否有“()”或“[ ]”)
  4. 对空指针应用delete是安全的

数组替代品

模板类vector

意义:可以在运行阶段设置vector对象的长度,可在末尾附加新数据,可在中间插入新数据

用法:

  头文件:#include<vector>

# vector<Type_name>name(n_elem)

# n_elem可以是整型常量,也可以是整型变量

 Eg:

模板类array

  用法:

    头文件 #include<array>

   # array<Type_name , n_elem>arr_name;

在array中 n_name 不能是变量

拓展

Sizeof(array)和strlen(array)区别

  1. sizeof 指出整个数组的长度
  2. strlen() 返回的是存储在数组中的字符串长度。只计算可见的字符,而不包括空字符

cin确定已完成字符串输入方法:

       cin使用空白(空格,制表符,换行符)来确定字符串的结束位置

面向对象——运行阶段:程序正在运行时(更灵活)

面向过程——编译阶段:编译器将程序组合起来

使用常规变量时,值是指定的量,地址是派生量

指针(处理存储数据的新策略),将地址视为指定的量,值是派生量

C与C++的优势之一:数组和指针基本等价

自动存储、静态存储和动态存储区别:

1、自动存储

       自动变量:在函数内部定义的常规变量使用自动存储空间

       意义:它们在所属的函数被调用时自动产生,在函数结束时自动消亡

       自动变量通常存储在栈区

       自动变量实际上是一个局部变量,其作用域为包含它的代码块

      

       生命周期:在特定函数被执行时存在

2、静态存储

整个程序在执行期间都存在的存储方式

使用方法:

    • 在函数外面定义它
    • 在声明变量时使用关键字  static (中文:静态)

Static typename bianlian_name ;

       生命周期:存在于程序的整个生命周期

3、动态存储

       申请用于存放X类型对象的内存空间,并依初值列表赋以初值

数组

数组:一种数据格式,能够存储多个同类型数据

数组声明:1、类型 2、数组名 3、数组中的元素数

Eg: typename array[arraySize]

arraySize:不能是变量,但可以用new()运算符避开

数组初始化规则:

  1. 提供的元素 <= arraySize
  2. Float array[50] = {0}
  3. Float array[ ] = {1,2,3}   此时 c++编译器将计算数组元素个数

C++11 新增规则:

  1. 初始化数组时,可以省略等号(=)

Eg:  int array[4]  {1,2,3,4}

  1. 可不在大括号里面包含任何东西

Eg:int array[4]  {}

  1. 列表初始化禁止缩窄转换(浮点数转换成整形)

字符串

定义:存储在内存的连续字节中的一系列字符

使用方法:

<1> char 方法:

               不是字符串

   是字符串

              字符串常量(字符串字面值):使用一个引号括起字符串

             

              使用单引号时,将把字符串的ASCII码值赋值给变量

              隐式地包括结尾的空字符

       注意:确定存储字符串的最短数组时,要把空字符算进去

<2>string 方法

使用标准头文件 #include<string>

与字符数组区别:可以将string对象声明为简单变量,而不是数组。类设计让程序能够自动处理string的大小。String对象更方便,也更安全。String类具有自动调整大小的功能,不会破坏数据

C++字符串初始化

       计算字符串长度:array_name.size()  或者  strlen(array_name)

面向行的输入:getline() 和 get()

 Getline()将丢弃换行符,而get()将换行符保留在输入序列中

getline()

意义:读取整行,它使用通过回车键输入的换行符来确认结尾。

  方法:cin.getline(数组名,字符数)

           #getline() 成员函数在读取指定数目的字符或遇到换行符时停止读取

  该函数有两个参数:

第一个参数用来输入行的数组的名称,第二个参数要读取字符数,还可以接收第三个可选参数

Eg: cin.getline(name,20) 

最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符     

get()

             因为get会将换行符保留在输入队列中,因此再次调用时看到的第一个字符便是换行符

Eg:

  

       解决办法:

              方法一:

cin.get(name, SIZE);

cin.get();

cin.get(dessert, SIZE);

        方法二:

cin.get(name, SIZE).get();

cin.get(dessert, SIZE).get();

可以这么写的原因:cin.get(name,ArSize) 返回一个对象,该对象随后将被用来调用get() 函数。类比可得: cin.getline(name1 , ArSize) . getline(name2 , ArSize) ;

注意:尽量使用 get()

混合输入字符串和数字:

  #  ( cin >> year) . get() ;  或者  ( cin >> year ) . get( ch ) ;

结构简介

介绍:结构是用户定义的类型,而结构声明定义了这种类型的数据属性

意义:同一结构可以存储多种类型的数据

创建步骤:1、定义结构描述(描述并标记能够存储在结构中的各种数据类型)

                2、描述创建结构变量(结构数据对象)

关键字struct  

标记成为新类型的名称  Person_information

列表存有 char、int、float,因此 Person_information结构含有三个成员

结构定义了指出新类型(Person_information)的特征

创建类型的变量:

成员运算符:( . ) 用来各个成员

结构声明位置的区别:

  1. 外部声明:可以被其后面的任何函数使用
  2. 局部声明:只能被该声明所属的函数使用

结构体初始化:(等号 = 是可以选择不加入的)

结构数组:

共用体

关键字:union  (用法与结构体相似)

概念:一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型

用途:当数据项使用两种或更多种格式(但不会同时使用)时,可以节省空间;常用于操作系统数据结构或硬件数据结构

注意:成员名称标识了变量的容量,由于共用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体长度为其最大成员的容量

枚举

关键字: enum  (用法与结构体相似)

举例:

用法:在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0,第二个枚举量的值是1,以此类推。可以通过显示地指定整数值来覆盖默认值、

设置枚举量的值:

  1. 可以使用赋值运算符来显示地设置枚举量的值
  2. 指定的值必须为整数,也可以只显示地定义其中一些枚举量的值
  3. 可以创建多个值相同的枚举量

枚举的取值范围:

       定义:首先找出上线,知道枚举量的最大值。找到大于最大值的最小的二进制的幂,并将它减1,eg: 101  à 127

                其次,计算下限,知道枚举量的最小值。如果它不小于零,贼取值范围下限为零;否则,与寻找上限相似,不过要加上负号

指针和自由存储空间

指针:

       用途:用于存储值的地址。因此,指针名表示地址

       (*)运算符:被称为间接值或解引用运算符,可以得到地址存储的值

Eg:假设manly是一个指针,则&manly表示一个地址,则*manly表示存储在该地址处的值。

      

声明和初始化指针:

       Typename*  指针名

注意:

  1. 指针变量不仅仅是指针,而且是指向特定类型的指针。double* num  和 int* name 是不同类型的指针
  2. 地址的长度或值既不能指示关于变量的长度或类型的任何信息,也不能指示改地址上有什么建筑物。一般来说,地址需要2或4字节,取决于计算机系统。

初始化:

  1. 声明语句中初始化指针。这种情况,被初始化的是指针,而不是它指向的值。例子中初始化的是p(而不是*p),将num的地址赋给p。

指针的危险:

       创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向数据的内存。因此,一定要在对指针应用解引用运算符(*)之前,使指针初始化。

使用new来分配内存:

       运用指针,在运行阶段分配未命名的内存以存储值

       格式:

Eg:

#new 的作用:程序员告诉指针需要哪种数据类型分配地址,new将找到一个长度正确的地址,并返回该内存块的地址。程序员的责任是将该地址赋给一个指针。

       数据对象:为数据项分配的内存块,它的范围比“变量”更为广泛。

       示例中,pn所指向的是一个数据对象

#new分配的内存块与常规变量分配的内存块区别:new分配的内存块在堆区,而常规变量分配的内存块在栈区。

注意:不要创建;两个指向同一内存块的指针,这将增加错误地删除同一内存块两次的可能性

使用new来创建动态数组:

  1. 静态联编:

在编译时给数组分配内存。这就意味着数组是在编译时加入到程序中,在编写程序时指定数组的长度

  1. 动态联编:

在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组长度(动态数组)。

Eg

使用动态联编:

使用new创建动态结构:

       步骤:创建结构和访问成员

  1. 创建结构

  1. 访问成员

运算符: (->)箭头成员运算符

        作用:可用于指向结构的指针

两种访问方法:

  1.                                             b.

                        

句点运算符和箭头运算符运用时机:

       句点:结构标识符是结构名

       箭头:标识符是指向结构的指针

使用delete释放内存:

       格式:delete 指针名;

       Eg:

示例中会释放pn指向的内存,但不会删除指针pn本身,可以将pn重新指向另一个新分配的内存块

#new和delete使用规则:

  1. 不要使用delete来释放不是new分配的内存
  2. 不要使用delete释放同一内存块两次
  3. new格式和delete格式对应(是否有“()”或“[ ]”)
  4. 对空指针应用delete是安全的

数组替代品

模板类vector

意义:可以在运行阶段设置vector对象的长度,可在末尾附加新数据,可在中间插入新数据

用法:

  头文件:#include<vector>

# vector<Type_name>name(n_elem)

# n_elem可以是整型常量,也可以是整型变量

 Eg:

模板类array

  用法:

    头文件 #include<array>

   # array<Type_name , n_elem>arr_name;

在array中 n_name 不能是变量

拓展

Sizeof(array)和strlen(array)区别

  1. sizeof 指出整个数组的长度
  2. strlen() 返回的是存储在数组中的字符串长度。只计算可见的字符,而不包括空字符

cin确定已完成字符串输入方法:

       cin使用空白(空格,制表符,换行符)来确定字符串的结束位置

面向对象——运行阶段:程序正在运行时(更灵活)

面向过程——编译阶段:编译器将程序组合起来

使用常规变量时,值是指定的量,地址是派生量

指针(处理存储数据的新策略),将地址视为指定的量,值是派生量

C与C++的优势之一:数组和指针基本等价

自动存储、静态存储和动态存储区别:

1、自动存储

       自动变量:在函数内部定义的常规变量使用自动存储空间

       意义:它们在所属的函数被调用时自动产生,在函数结束时自动消亡

       自动变量通常存储在栈区

       自动变量实际上是一个局部变量,其作用域为包含它的代码块

      

       生命周期:在特定函数被执行时存在

2、静态存储

整个程序在执行期间都存在的存储方式

使用方法:

    • 在函数外面定义它
    • 在声明变量时使用关键字  static (中文:静态)

Static typename bianlian_name ;

       生命周期:存在于程序的整个生命周期

3、动态存储

       申请用于存放X类型对象的内存空间,并依初值列表赋以初值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值