C++ Primer Plus读书笔记(三)复合类型

这节主要是介绍数组、结构体、类等概念,以及new delete内存管理。

1、数组

  首先普及一下C++中字符串的概念,只有在结尾有 \0 的才叫字符串, cout 输出字符串也以空字符为标记进行结束输出。

 

2、输入

  读取一行数据,有两个函数可以实现

1 cin.get();
2 cin.getline();

  其中cin.getline()会把末尾的空字符丢掉。读取指定长度可以这么用 cin.getline(name, LENGTH); 

 

3、string类

  注意下边这种用法,这是明显区分与C语言的字符串数组的特性。

1 string str1;
2 string str2;
3 string str3;
4 
5 str1 = str2 + str3;

 

4、结构体

  这个和C语言没什么区别。

 

5、指针

  1 - new的用法

1 type_name* point_name = new type_name;
2 
3 
4 int* array = new int [10];
5 delete [] array;    //对应的释放

  2 - delete

1 int* ptr = new int;
2 delete ptr;

  需注意几点:

    a. 只能释放new出来的内存,delete参数是地址(ptr而不是*ptr)

    b. 可以释放空指针

 

  3、C++将数组名解释为数组第一个元素的地址:

1 double wages[10] = {};
2 
3 wages == &wages[0]

   

  4、关于指针数组

 1 struct year_end
 2 {
 3     int year;
 4     //some else 
 5 };
 6 
 7 struct year_end s1, s2, s3;
 8 struct year_end * arp[3] = {&s1, &s2, &s3};
 9 
10 struct year_end **arp2 = arp;
11 auto ppb = arp;    //use auto

 

  5、摸板类vector

    数组的替代品,使用new和delete自动进行内存管理。用法举例:

1 #include <vector>
2 
3 vector<int> vint;    //一个int型的vector对象
4 vector<double> vdouble(n);    //一个double型的vector对象

 

  5、模板类array

1 #include <array>
2 
3 using namespace std;
4 
5 array<int, 5> array_int;
6 array<double, 10> array_double = {1.1, 2.2, ...};
7 
8 array<type_name, number> array_name;

    ps:number不能是变量,只能是常量

  访问vector或者array时,可以使用自身的成员函数 at ,有检查越界的保护,举例:

1 array_double.at(1);
2 
3 array_double.begin();
4 array_double.end();
5 //确定边界的成员函数,后边再说

 

posted @ 2020-02-24 17:59  恩赐解脱ゞ  阅读(169)  评论(0编辑  收藏  举报