第四章
来源:互联网 发布:软件售后工程师 编辑:程序博客网 时间: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类简介
- C++98添加的string类 <string> std中
- 可以使用列表初始化为string对象初始化
- 常用运算(以下str均为对象):
- str1 = str2; str3 = st1 + str2; str1 += str2; str1.size();
- getline(cin,str1); 将cin作为参数,指出去哪里查找输入,string类的大小会随输入自动调整
- 此时的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
- 第四章第四题
- 第四章第四题
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- 第四章
- spring profile 多环境配置管理
- 关于C中字符数组,字符指针以及C++中string类型的两两转换及排序
- VIVO y15t 线刷 救砖 注意事项 刷机失败的一定要看
- 选择结构程序代码参考
- java 核心集合框架
- 第四章
- 待补2017.3.12 uva11235
- GitHub 上README.md语法
- linux软件包管理(RPM)简单介绍
- 第五、六、七章
- 职场35岁现象:请别浪费你30岁前的时光
- 编写类 String 的构造函数、析构函数和赋值函数
- Google首席科学家谈Google是怎么做深度学习的
- JAVA使用GNU的Gettext后端国际化