/
...
/
/
二.复合数据类型
Search
Try Notion
二.复合数据类型
一.复合数据结构简介
所涉及数据结构简介
数组
C-Style字符串
结构 结构数组
union
enum
std::string
temeplete vector
temeplete
二.数组
🤔数组和指针组区别
定义char *a = {"123"}; 为指针组 ; char a[] = {"123"};为数组 防止混淆
初始化区别
char a[] = {"123"}; a[2] = 4 ; 可行,虽然是用字面值(const)初始化 但是是真的初始化,初始化后创建的是非const对象
char *a = {"123"}; a[2] = 4 ; 是先创建匿名对象再赋值,严格意义上甚至不允许(const→非const变量)
迭代器区别
使用数组创建 可正常使用for(int x : a)
指针创建则不行
三.字符串
C Style 字符串
"..."字面量特性
隐式的需要'\0' 作为结尾
字符串字面量可通过 空格进行拼接(C++新特性)"a" "b"=="ab" 其中用于拼接的空格不会被添加
cstring函数简介
strcat: 拼接 strncat 安全拼接
strcpy: 拷贝 strncpy 安全拷贝
strcmp: 从低位开始(左→右)视作整数比较,按照ANSCII顺序[0-9A-Za-z]排序
C++ 原生字符串std::string (ANSI/ISO C++ 98)
std::string简介
位于<string> 库中, std命名空间中
视作简单类型(字符串变量赋值传递时按值传递)
定义时创建长度为0的对象,长度可动态改变
cin.get/getline 可以处理string类(使用string的一个友元函数)
与C Style类似之处
二者初始化方式完全通用
std::srting类操作
重载了operator + 可用于字符串的拼接
赋值运算等价于原来的 strcpy
其他字符串字面值
四.struct/enum
简介
用户定义的数据类型,为OOP Class的基石
普通结构体
💻定义/声明
struct inflatable { int a; float b; }; inflatable c;
Copy
C++
注意在声明变量的时候不需要像ANSI C一样加入struct 关键字
结构体可以在函数内定义也可在外部定义,推荐使用外部定义,使得全局(名称空间)可见
结构体数组
普通枚举enum
定义
普通定义: enum bits{}
匿名定义: 由于匿名,外部无法引用声明,无连接性
显式设定枚举值 enum bits{one=1, two=2}
部分显式设定 enum bits{one,two=100,three}
默认从0开始: one=0
未指定值的符号设定为前一个数+1 故three==101
枚举变量赋值/初始化规则
在默认情况下,只能将枚举值赋给枚举变量: bits first_bit = 1 ; 不可行
但是可以强制类型转换 first_bit=bits(1); 赋值
其中类型转换必须在枚举定义的范围中,否则操作未定义
enum bit{one=1,eight=8}; bit myflag = bit(5) ;
是合法的,myflag在表达式中可被正常的类型转换为5的整型
枚举运算符
只定义了赋值运算,没有定义算数运算first_bit++ 不可行first_bit+first_bit 也不可行
但是如果在表达式中另一个操作数为整型可以整型提升
枚举类的用途
匿名枚举类作为符号常量: 比如switch语句
class enum 使得符号常量具有作用域(C++11)