Skip to content

Commit

Permalink
🎨 refactor(all): refactor all struct
Browse files Browse the repository at this point in the history
  • Loading branch information
xs08 committed Aug 23, 2022
1 parent 73aa8a3 commit 823201c
Show file tree
Hide file tree
Showing 132 changed files with 141 additions and 141 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

算数类型分为两类:整型(integral type)、浮点型(floating-point type)。

![2-1](../images/chap2/2-1.png)
![2-1](../images/chap02/2-1.png)

`bool`类型的取值是`true`或`false`。

Expand Down Expand Up @@ -119,7 +119,7 @@ std::cout << '\115' << '\n'; // prints M followed by a newline
添加特定的前缀和后缀,可以改变整型、浮点型和字符型字面值的默认类型。
![2-2](Images/2-2.png)
![2-2](../images/chap02/2-2.png)
使用一个长整型字面值时,最好使用大写字母`L`进行标记,小写字母`l`和数字`1`容易混淆。
Expand Down Expand Up @@ -170,7 +170,7 @@ int j; // declares and defines j
C++的标识符由字母、数字和下划线组成,其中必须以字母或下划线开头。标识符的长度没有限制,但是对大小写字母敏感。C++为标准库保留了一些名字。用户自定义的标识符不能连续出现两个下划线,也不能以下划线紧连大写字母开头。此外,定义在函数体外的标识符不能以下划线开头。
![2-3](Images/2-3.png)
![2-3](../images/chap02/2-3.png)
### 名字的作用域(Scope of a Name)
Expand Down Expand Up @@ -298,7 +298,7 @@ int *pi = &ival; // pi points to an int
int **ppi = &pi; // ppi points to a pointer to an int
```
![2-4](Images/2-4.png)
![2-4](../images/chap02/2-4.png)
指向指针的引用(References to Pointers):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ using std::cout;

初始化`string`的方式:

![3-1](Images/3-1.png)
![3-1](../images/chap03/3-1.png)

如果使用等号初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用等号,则执行的是直接初始化(direct initialization)。

### string对象上的操作(Operations on strings)

`string`的操作:

![3-2](Images/3-2.png)
![3-2](../images/chap03/3-2.png)

在执行读取操作时,`string`对象会自动忽略开头的空白(空格符、换行符、制表符等)并从第一个真正的字符开始读取,直到遇见下一处空白为止。

Expand All @@ -52,7 +52,7 @@ string s6 = s1 + ", " + "world"; // ok: each + has a string operand

头文件`cctype`中的字符操作函数:

![3-3](Images/3-3.png)
![3-3](../images/chap03/3-3.png)

建议使用C++版本的C标准库头文件。C语言中名称为`name.h`的头文件,在C++中则被命名为`cname`。

Expand Down Expand Up @@ -94,7 +94,7 @@ C++标准并不要求标准库检测下标是否合法。编程时可以把下

初始化`vector`对象的方法:

![3-4](Images/3-4.png)
![3-4](../images/chap03/3-4.png)

初始化`vector`对象时如果使用圆括号,可以说提供的值是用来构造(construct)`vector`对象的;如果使用的是花括号,则是在列表初始化(list initialize)该`vector`对象。

Expand All @@ -117,7 +117,7 @@ for (int i = 0; i != 100; ++i)

`vector`支持的操作:

![3-5](Images/3-5.png)
![3-5](../images/chap03/3-5.png)

`size`函数返回`vector`对象中元素的个数,返回值是由`vector`定义的`size_type`类型。`vector`对象的类型包含其中元素的类型。

Expand Down Expand Up @@ -154,7 +154,7 @@ auto b = ivec.begin(), e = ivec.end(); // b and e have the same type

标准容器迭代器的运算符:

![3-6](Images/3-6.png)
![3-6](../images/chap03/3-6.png)

因为`end`返回的迭代器并不实际指向某个元素,所以不能对其进行递增或者解引用的操作。

Expand All @@ -179,7 +179,7 @@ C++11新增了`cbegin`和`cend`函数,不论`vector`或`string`对象是否为

`vector`和`string`迭代器支持的操作:

![3-7](Images/3-7.png)
![3-7](../images/chap03/3-7.png)

`difference_type`类型用来表示两个迭代器间的距离,这是一种带符号整数类型。

Expand Down Expand Up @@ -246,7 +246,7 @@ string *p2 = nums; // equivalent to p2 = &nums[0]

一维数组寻址公式:

![3-8](Images/3-8.png)
![3-8](../images/chap03/3-8.png)

当使用数组作为一个`auto`变量的初始值时,推断得到的类型是指针而非数组。但`decltype`关键字不会发生这种转换,直接返回数组类型。

Expand Down Expand Up @@ -281,7 +281,7 @@ C++标准支持C风格字符串,但是最好不要在C++程序中使用它们

C风格字符串的函数:

![3-9](Images/3-9.png)
![3-9](../images/chap03/3-9.png)

C风格字符串函数不负责验证其参数的正确性,传入此类函数的指针必须指向以空字符作为结尾的数组。

Expand Down Expand Up @@ -346,7 +346,7 @@ int (&row)[4] = ia[1]; // binds row to the second four-element array in ia

多维数组寻址公式:

![3-10](Images/3-10.png)
![3-10](../images/chap03/3-10.png)

使用范围`for`语句处理多维数组时,为了避免数组被自动转换成指针,语句中的外层循环控制变量必须声明成引用类型。

Expand Down Expand Up @@ -392,4 +392,4 @@ for (auto p = ia; p != ia + 3; ++p)
cout << *q << ' ';
cout << endl;
}
```
```
8 changes: 4 additions & 4 deletions Chap4:Expressions/README.md → Chap04:Expressions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,15 @@ cout << i << " " << ++i << endl; // undefined

算术运算符(左结合律):

![4-1](Images/4-1.png)
![4-1](../images/chap04/4-1.png)

在除法运算中,C++语言的早期版本允许结果为负数的商向上或向下取整,C++11新标准则规定商一律向0取整(即直接去除小数部分)。

## 逻辑和关系运算符(Logical and Relational Operators)

关系运算符作用于算术类型和指针类型,逻辑运算符作用于任意能转换成布尔值的类型。逻辑运算符和关系运算符的返回值都是布尔类型。

![4-2](Images/4-2.png)
![4-2](../images/chap04/4-2.png)

逻辑与(logical AND)运算符`&&`和逻辑或(logical OR)运算符`||`都是先计算左侧运算对象的值再计算右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会去计算右侧运算对象的值。这种策略称为短路求值(short-circuit evaluation)。

Expand Down Expand Up @@ -148,7 +148,7 @@ cond ? expr1 : expr2;

位运算符(左结合律):

![4-3](Images/4-3.png)
![4-3](../images/chap04/4-3.png)

在位运算中符号位如何处理并没有明确的规定,所以建议仅将位运算符用于无符号类型的处理。

Expand Down Expand Up @@ -230,4 +230,4 @@ cast-name<type>(expression);
```c++
type (expression); // function-style cast notation
(type) expression; // C-language-style cast notation
```
```
8 changes: 4 additions & 4 deletions Chap5:Statements/README.md → Chap05:Statements/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ else

`switch`语句的形式:

![5-1](Images/5-1.png)
![5-1](../images/chap05/5-1.png)

`switch`语句先对括号里的表达式求值,值转换成整数类型后再与每个`case`标签(case label)的值进行比较。如果表达式的值和某个`case`标签匹配,程序从该标签之后的第一条语句开始执行,直到到达`switch`的结尾或者遇到`break`语句为止。`case`标签必须是整型常量表达式。

Expand Down Expand Up @@ -259,14 +259,14 @@ catch (exception-declaration)

- 头文件`stdexcept`定义了几种常用的异常类。

![5-2](Images/5-2.png)
![5-2](../images/chap05/5-2.png)

- 头文件`new`定义了`bad_alloc`异常类。

- 头文件`type_info`定义了`bad_cast`异常类。

标准库异常类的继承体系:

![5-3](Images/5-3.png)
![5-3](../images/chap05/5-3.png)

只能以默认初始化的方式初始化`exception`、`bad_alloc`和`bad_cast`对象,不允许为这些对象提供初始值。其他异常类的对象在初始化时必须提供一个`string`或一个C风格字符串,通常表示异常信息。`what`成员函数可以返回该字符串的`string`副本。
只能以默认初始化的方式初始化`exception`、`bad_alloc`和`bad_cast`对象,不允许为这些对象提供初始值。其他异常类的对象在初始化时必须提供一个`string`或一个C风格字符串,通常表示异常信息。`what`成员函数可以返回该字符串的`string`副本。
6 changes: 3 additions & 3 deletions Chap6:Functions/README.md → Chap06:Functions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ int main(int argc, char **argv) { /*...*/ }

在*Visual Studio*中可以设置`main`函数调试参数:

![6-1](Images/6-1.png)
![6-1](../images/chap06/6-1.png)

### 含有可变形参的函数(Functions with Varying Parameters)

Expand All @@ -201,7 +201,7 @@ C++还可以使用省略符形参传递可变数量的实参,但这种功能

`initializer_list`提供的操作:

![6-2](Images/6-2.png)
![6-2](../images/chap06/6-2.png)

拷贝或赋值一个`initializer_list`对象不会拷贝列表中的元素。拷贝后,原始列表和副本共享元素。

Expand Down Expand Up @@ -624,4 +624,4 @@ useBigger(s1, s2, lengthCompare);

关键字`decltype`作用于函数时,返回的是函数类型,而不是函数指针类型。

函数可以返回指向函数的指针。但返回类型不会像函数类型的形参一样自动地转换成指针,必须显式地将其指定为指针类型。
函数可以返回指向函数的指针。但返回类型不会像函数类型的形参一样自动地转换成指针,必须显式地将其指定为指针类型。
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

头文件`iostream`定义了用于读写流的基本类型,`fstream`定义了读写命名文件的类型,`sstream`定义了读写内存中`string`对象的类型。

![8-1](Images/8-1.png)
![8-1](../images/chap08/8-1.png)

宽字符版本的IO类型和函数的名字以`w`开始,如`wcin`、`wcout`和`wcerr`分别对应`cin`、`cout`和`cerr`。它们与其对应的普通`char`版本都定义在同一个头文件中,如头文件`fstream`定义了`ifstream`和`wifstream`类型。

Expand All @@ -45,7 +45,7 @@ out2 = print(out2); // error: cannot copy stream objects

IO库条件状态:

![8-2](Images/8-2.png)
![8-2](../images/chap08/8-2.png)

`badbit`表示系统级错误,如不可恢复的读写错误。通常情况下,一旦`badbit`被置位,流就无法继续使用了。在发生可恢复错误后,`failbit`会被置位,如期望读取数值却读出一个字符。如果到达文件结束位置,`eofbit`和`failbit`都会被置位。如果流未发生错误,则`goodbit`的值为0。如果`badbit`、`failbit`和`eofbit`任何一个被置位,检测流状态的条件都会失败。

Expand Down Expand Up @@ -123,7 +123,7 @@ cin.tie(old_tie); // reestablish normal tie between cin and cout

头文件`fstream`定义了三个类型来支持文件IO:`ifstream`从给定文件读取数据,`ofstream`向指定文件写入数据,`fstream`可以同时读写指定文件。

![8-3](Images/8-3.png)
![8-3](../images/chap08/8-3.png)

### 使用文件流对象(Using File Stream Objects)

Expand All @@ -150,7 +150,7 @@ ofstream out; // output file stream that is not associated with any file

每个流都有一个关联的文件模式,用来指出如何使用文件。

![8-4](Images/8-4.png)
![8-4](../images/chap08/8-4.png)

- 只能对`ofstream`或`fstream`对象设定`out`模式。

Expand Down Expand Up @@ -182,7 +182,7 @@ out.close();

头文件`sstream`定义了三个类型来支持内存IO:`istringstream`从`string`读取数据,`ostringstream`向`string`写入数据,`stringstream`可以同时读写`string`的数据。

![8-5](Images/8-5.png)
![8-5](../images/chap08/8-5.png)

### 使用istringstream(Using an istringstream)

Expand Down Expand Up @@ -232,4 +232,4 @@ for (const auto &entry : people)
cerr << "input error: " << entry.name
<< " invalid number(s) " << badNums.str() << endl;
}
```
```
Loading

0 comments on commit 823201c

Please sign in to comment.