C++——初步了解基本复合类型

auto:变量的自动类型推断

可以在声明变量的时候根据变量的初始化类型自动为变量选择匹配的类型
因为auto自动类型推断发生在编译期间,所以使用auto不会造成效率降低
例: int a=1; <——> auto a=1;
Float f=1.5; <—— >auto f=1.5;
String str=“aaa”; <—— >auto str=“aaa”;
auto可以代替基本类型;在结构体里面不允许使用auto

引用:(不做拷贝)
简单类型我们可以使用一个新的名字来作为它的别名,我们可以通过别名在其他地方来调用它
例:int num1 =10;—>创建引用: int &num2=num1;
解释:通过引用,我们可以在swap(int & n1,int & n2) 函数里面传入两个外部值得引用类型,从而实现交换。而不是只有通过指针传地址

数组
多个相同类型的集合,在定义数组时,数组长度可以是常量、const或者表达式,但都必须是已知的。初始化数组时可以赋值,也可以不赋值

字符串
字符串的定义有两种标准:
1.老式的C语言标准:字符串数组、字符串常量
字符串数组(char arr[size]={‘a’,‘b’,‘c’……};):在定义时可以赋值(赋值时最后一位必须是 \0 ),也可以不赋值,没有赋值的默认填充 \0。在读取时,遇到 \0 就停止。
字符串常量 (char arr[siz]=“abcd……”😉 :字符串常量后面默认有一个 \0 。
求数组总长度:sizeof(arr); 求可见位数长度:strlen(arr);

C++string类库
关于字符数组的输入问题:
方法一:cin>>str;
方法二:cin.get(str,size)或cin.getline(str,size) .cin.get() 是单字符串输入,以空格或回车结束(这两个在存入字节流时都是 \0 )。getline是多字符串输入,空格会被存入,只有回车键才被转换成 \0 。注意:当\0被存入后,下一个get()会从输入队列的第一位,也就是\0开始读取(会导致读到一个空行)。可以用一个get()去消除这个影响。
方法三:getline(cin,str),这个方法没有固定长度,所以只适用于string
关于string:(string类位于命名空间std中)
和java用法一致
保留原始输出的方法:R“(内容)”;
列:使用cout<<R“(aa"bb" ccc"\n"dfad"\a")”; 输出结果:aa"bb" ccc"\n"dfad"\a"

结构体:struct
结构体是一个比数组更灵活的数据格式,他可以存储多种不同类型的数据
结构体的创建和声明:(name可以省略,一般不省略)
一般格式:
struct name{
成员列表;
}strlist;
结构体的声明很重要:局部声明和外部声明
结构体在初始化时可以赋值,也可以在使用时赋值;
结构体的成员变量只能单个赋值以及单个调用
同类的结构体变量可以相互赋值。如: strlist1=strlist2
结构体可以作为参数传递给函数;函数的返回值也可以是一个结构体
结构体也可以有指针。
两种用法:
1.(*p).num ;
2.p->num; 两种用法和结构体调用成员的方法(如:stu.num)等价。

结构体的箭头指针和链表的指针用法相似,两者都可以用这两种表示方法
C++中,使用new关键字来创建新的结构体
结构体数组:数组的每一个元素都是一个结构体
结构体数组的创建和声明:(name可以省略,一般不省略)
一般格式: struct name{
成员列表;
成员列表;
} strarr[size];

结构体数组在初始化时可以赋值,也可以在使用时赋值;
结构体数组也可以有指针

这里需要注意这两种形式:(++p)->num 和 (p++)->num :他们的含义完全不相同,前一个是先自增再指,最后指向是一个数组元素的一个成员值;后一个是先指向数组元素的成员值,再使数组元素自增。最后指向是数组的下一个成员

共用体:union
几个不同类型的变量共享同一块内存地址,但这块内存地址同一时间只能够表示其中一个。这个地址的长度是包含的元素中占用地址空间最大的那一个的长度。
*表示形式: union name{
成员列表;
} 变量列表;
引用共用体的方式:和结构体相同
–> name.成员

共用体的特点:
1.共用体后引用的成员会覆盖前面引用的成员
2.共用体起作用的是最后一次被赋值的成员
3.共用体变量的地址和他每一个成员的地址都相同
4.不能对共用体变量赋值,也不能企图通过引用共用体变量来获取一个值
5.共用体中可以出现结构体,共用体也可以定义共用体数组。同样,结构体中也可以出现共用体。

枚举:enum (可以用来代替const)
所谓枚举,就是指把可能的值意义列举出来,让变量的值局限于列举出来的范围
表示: enum name{
枚举元素列表
}变量列表;
每一个枚举元素都可以当做常量来使用,故称其为:枚举常量 在默认情况下,枚举常量从0开始,依次增加(类似数组)。若其中一个被为其它赋值,那么被赋值的元素后面的枚举常量则从它开始依次增加。枚举常量允许相同(如:123456 ;其中5被赋值为1的话,那么5后面的值变成2)
注意:
1.枚举常量只有赋值运算符,没有算数运算符;
2.如果直接输出一个枚举变量,得到的是一个整数;但是不能把整数赋值给枚举变量;
3.枚举常量是整型,可以被提升为int型,但是int型不能直接转化成枚举常量

自定义类型:typedef
简单的使用一个新的类型名代替原有的类型名(多用于结构体、共用体、枚举)

指针和自由存储空间:
在C++中创建指针时,一定要在引用前初始化指针,即使是初始化为空。
在C中是使用库函数 malloc()来创建内存空间;而在C++中,使用new 关键字来创建,new后面跟需要创建的类型:* type_Name * point_Name= new typeName。
列: int * num=new int; double * dou=new double; 这里的指针指向的是创建的内存空间的地址
使用new 关键字创建的内存空间位于堆中
Delete:
当需要使用内存时,使用new 来创建空间,使用完成后需要用delect来释放空间:列:delect num 、delect dou
注意
1.delete 只能用于释放由new 创建的空间
2.同一块空间不要使用两次delete
3.如果创建的是数组 new [],则使用 delete[] 来释放
4.如果使用new 为一个实体分配内存,则改使用delete 来释放
5.可以对空指针使用 delete
6.不能使用 sizeof来确定动态创建的数组包含的字符数量
C++可以使用指针+下标的方式来表示数组元素
列:float * arr=new float[n]; //动态创建一个arr数组
则:arr 指向数组中的第一个元素地址 ;在 C 中用 * (arr+n) 表示第 n 个元素的值;但在C++中第 n 个元素还可以表示为:arr[n]来表示第n个元素的值
在使用指针定义字符串或者字符数组时,数组表示法和指针表示法是可以互换的。
在使用指针定义字符串或者字符数组时,数组名或指针指向都是首地址,cout 都能通过他们输出整个字符串(读取到 \0 停止)
警告:
无论何时,将信息读入一个没有初始化的指针都是一个糟糕的做法!
注意:
在给没有初始化的字符数组赋值时,应使用strcopy() 或strncopy(方法,而不是“=”;
1.自动存储 (栈)
三种管理数据的方法:2.静态存储 (static)
3.动态存储 (堆、new()和delete() )

关于类模板:
一、vector

vector是一种动态数组,它的原型在头文件内,命名空间在std;
结构:vector <type_name> vt (len) :这里的空间是能够动态增长的
类型名 对象名 空间长度
二、array
array是一种静态数组,它的长度固定,成员存储在栈里。它的原型在头文件内,命名空间在std;
结构: array<type_name,len> arr
类型名 空间长度 对象名

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值