Skip to content

Commit

Permalink
Docs: 'Image'重命名为'Images'
Browse files Browse the repository at this point in the history
  • Loading branch information
czs108 committed Aug 8, 2019
1 parent c441f26 commit e5cbbbe
Show file tree
Hide file tree
Showing 124 changed files with 108 additions and 108 deletions.
20 changes: 10 additions & 10 deletions Chapter-10 Generic Algorithms/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ void elimDups(vector<string> &words)

`unique`函数重排输入序列,消除相邻的重复项,返回指向不重复值范围末尾的迭代器。

![10-1](Image/10-1.png)
![10-1](Images/10-1.png)

## 定制操作(Customizing Operations)

Expand Down Expand Up @@ -215,7 +215,7 @@ for_each(words.begin(), words.end(),

`lambda`捕获列表形式:

![10-2](Image/10-2.png)
![10-2](Images/10-2.png)

默认情况下,对于值方式捕获的变量,`lambda`不能修改其值。如果希望修改,就必须在参数列表后添加关键字`mutable`。

Expand Down Expand Up @@ -293,7 +293,7 @@ for_each(words.begin(), words.end(), bind(print, ref(os), _1, ' '));

插入迭代器操作:

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

插入器有三种类型,区别在于元素插入的位置:

Expand Down Expand Up @@ -343,15 +343,15 @@ vector<int> vec(in_iter, eof); // construct vec from an iterator range

`istream_iterator`操作:

![10-4](Image/10-4.png)
![10-4](Images/10-4.png)

将`istream_iterator`绑定到一个流时,标准库并不保证迭代器立即从流读取数据。但可以保证在第一次解引用迭代器之前,从流中读取数据的操作已经完成了。

定义`ostream_iterator`对象时,必须将其绑定到一个指定的流。不允许定义空的或者表示尾后位置的`ostream_iterator`。

`ostream_iterator`操作:

![10-5](Image/10-5.png)
![10-5](Images/10-5.png)

`*`和`++`运算符实际上不会对`ostream_iterator`对象做任何操作。但是建议代码写法与其他迭代器保持一致。

Expand All @@ -374,7 +374,7 @@ sort(vec.begin(), vec.end()); // sorts vec in "normal" order
sort(vec.rbegin(), vec.rend());
```

![10-6](Image/10-6.png)
![10-6](Images/10-6.png)

不能从`forward_list`或流迭代器创建反向迭代器。

Expand All @@ -389,15 +389,15 @@ cout << string(line.crbegin(), rcomma) << endl;
cout << string(rcomma.base(), line.cend()) << endl;
```

![10-7](Image/10-7.png)
![10-7](Images/10-7.png)

反向迭代器的目的是表示元素范围,而这些范围是不对称的。用普通迭代器初始化反向迭代器,或者给反向迭代器赋值时,结果迭代器与原迭代器指向的并不是相同元素。

## 泛型算法结构(Structure of Generic Algorithms)

算法要求的迭代器操作可以分为5个迭代器类别(iterator category):

![10-8](Image/10-8.png)
![10-8](Images/10-8.png)

### 5类迭代器(The Five Iterator Categories)

Expand Down Expand Up @@ -469,10 +469,10 @@ reverse_copy(beg, end, dest); // copy elements in reverse order into dest

`list`和`forward_list`成员函数版本的算法:

![10-9](Image/10-9.png)
![10-9](Images/10-9.png)

`list`和`forward_list`的`splice`函数可以进行容器合并,其参数如下:

![10-10](Image/10-10.png)
![10-10](Images/10-10.png)

链表特有版本的算法操作会改变底层容器。
16 changes: 8 additions & 8 deletions Chapter-11 Associative Containers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

允许重复保存关键字的容器名字都包含单词`multi`;无序保存元素的容器名字都以单词`unordered`开头。

![11-1](Image/11-1.png)
![11-1](Images/11-1.png)

`map`和`multimap`类型定义在头文件*map*中;`set`和`multiset`类型定义在头文件*set*中;无序容器定义在头文件*unordered_map*和*unordered_set*中。

Expand Down Expand Up @@ -91,7 +91,7 @@ pair<string, vector<int>> line; // holds string and vector<int>

`pair`支持的操作:

![11-2](Image/11-2.png)
![11-2](Images/11-2.png)

在C++11中,如果函数需要返回`pair`,可以对返回值进行列表初始化。早期C++版本中必须显式构造返回值。

Expand All @@ -112,7 +112,7 @@ pair<string, int> process(vector<string> &v)

关联容器定义了类型别名来表示容器关键字和值的类型:

![11-3](Image/11-3.png)
![11-3](Images/11-3.png)

对于`set`类型,`key_type`和`value_type`是一样的。`set`中保存的值就是关键字。对于`map`类型,元素是关键字-值对。即每个元素是一个`pair`对象,包含一个关键字和一个关联的值。由于元素关键字不能改变,因此`pair`的关键字部分是`const`的。另外,只有`map`类型(`unordered_map`、`unordered_multimap`、`multimap`、`map`)才定义了`mapped_type`。

Expand Down Expand Up @@ -170,7 +170,7 @@ word_count.insert(map<string, size_t>::value_type(word, 1));

关联容器的`insert`操作:

![11-4](Image/11-4.png)
![11-4](Images/11-4.png)

`insert`或`emplace`的返回值依赖于容器类型和参数:

Expand All @@ -181,7 +181,7 @@ word_count.insert(map<string, size_t>::value_type(word, 1));

关联容器的删除操作:

![11-5](Image/11-5.png)
![11-5](Images/11-5.png)

与顺序容器不同,关联容器提供了一个额外的`erase`操作。它接受一个`key_type`参数,删除所有匹配给定关键字的元素(如果存在),返回实际删除的元素数量。对于不包含重复关键字的容器,`erase`的返回值总是10。若返回值为0,则表示想要删除的元素并不在容器中。

Expand All @@ -193,15 +193,15 @@ word_count.insert(map<string, size_t>::value_type(word, 1));

`map`和`unordered_map`的下标操作:

![11-6](Image/11-6.png)
![11-6](Images/11-6.png)

对`map`进行下标操作时,返回的是`mapped_type`类型的对象;解引用`map`迭代器时,返回的是`value_type`类型的对象。

### 访问元素(Accessing Elements)

关联容器的查找操作:

![11-7](Image/11-7.png)
![11-7](Images/11-7.png)

如果`multimap`或`multiset`中有多个元素具有相同关键字,则这些元素在容器中会相邻存储。

Expand Down Expand Up @@ -257,6 +257,6 @@ for (auto pos = authors.equal_range(search_item);

无序容器管理操作:

![11-8](Image/11-8.png)
![11-8](Images/11-8.png)

默认情况下,无序容器使用关键字类型的`==`运算符比较元素,还使用一个`hash<key_type>`类型的对象来生成每个元素的哈希值。标准库为内置类型和一些标准库类型提供了hash模板。因此可以直接定义关键字是这些类型的无序容器,而不能直接定义关键字类型为自定义类类型的无序容器,必须先提供对应的hash模板版本。
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
16 changes: 8 additions & 8 deletions Chapter-12 Dynamic Memory/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ shared_ptr<list<int>> p2; // shared_ptr that can point at a list of ints

`shared_ptr`和`unique_ptr`都支持的操作:

![12-1](Image/12-1.png)
![12-1](Images/12-1.png)

`shared_ptr`独有的操作:

![12-2](Image/12-2.png)
![12-2](Images/12-2.png)

`make_shared`函数(定义在头文件*memory*中)在动态内存中分配一个对象并初始化它,返回指向此对象的`shared_ptr`。

Expand Down Expand Up @@ -123,7 +123,7 @@ shared_ptr<int> p2(new int(1024)); // ok: uses direct initialization

默认情况下,用来初始化智能指针的内置指针必须指向动态内存,因为智能指针默认使用`delete`释放它所管理的对象。如果要将智能指针绑定到一个指向其他类型资源的指针上,就必须提供自定义操作来代替`delete`。

![12-3](Image/12-3.png)
![12-3](Images/12-3.png)

不要混合使用内置指针和智能指针。当将`shared_ptr`绑定到内置指针后,资源管理就应该交由`shared_ptr`负责。不应该再使用内置指针访问`shared_ptr`指向的内存。

Expand Down Expand Up @@ -230,7 +230,7 @@ unique_ptr<int> p2 = make_unique<int>(42);

`unique_ptr`操作:

![12-4](Image/12-4.png)
![12-4](Images/12-4.png)

`release`函数返回`unique_ptr`当前保存的指针并将其置为空。

Expand Down Expand Up @@ -285,7 +285,7 @@ void f(destination &d /* other needed parameters */)

`weak_ptr`是一种不控制所指向对象生存期的智能指针,它指向一个由`shared_ptr`管理的对象。将`weak_ptr`绑定到`shared_ptr`不会改变`shared_ptr`的引用计数。如果`shared_ptr`被销毁,即使有`weak_ptr`指向对象,对象仍然有可能被释放。

![12-5](Image/12-5.png)
![12-5](Images/12-5.png)

创建一个`weak_ptr`时,需要使用`shared_ptr`来初始化它。

Expand Down Expand Up @@ -356,7 +356,7 @@ up.release(); // automatically uses delete[] to destroy its pointer

指向数组的`unique_ptr`:

![12-6](Image/12-6.png)
![12-6](Images/12-6.png)

与`unique_ptr`不同,`shared_ptr`不直接支持动态数组管理。如果想用`shared_ptr`管理动态数组,必须提供自定义的删除器。

Expand Down Expand Up @@ -385,7 +385,7 @@ auto const p = alloc.allocate(n); // allocate n unconstructed strings

标准库`allocator`类及其算法:

![12-7](Image/12-7.png)
![12-7](Images/12-7.png)

`allocator`分配的内存是未构造的,程序需要在此内存中构造对象。新标准库的`construct`函数接受一个指针和零或多个额外参数,在给定位置构造一个元素。额外参数用来初始化构造的对象,必须与对象类型相匹配。

Expand Down Expand Up @@ -413,6 +413,6 @@ alloc.deallocate(p, n);

`allocator`算法:

![12-8](Image/12-8.png)
![12-8](Images/12-8.png)

传递给`uninitialized_copy`的目的位置迭代器必须指向未构造的内存,它直接在给定位置构造元素。返回(递增后的)目的位置迭代器。
6 changes: 3 additions & 3 deletions Chapter-14 Overloaded Operations and Conversions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

只能重载大多数已有的运算符,无权声明新的运算符号。

![14-1](Image/14-1.png)
![14-1](Images/14-1.png)

重载运算符的优先级和结合律与对应的内置运算符一致。

Expand Down Expand Up @@ -350,7 +350,7 @@ private:

标准库在头文件*functional*中定义了一组表示算术运算符、关系运算符和逻辑运算符的类,每个类分别定义了一个执行命名操作的调用运算符。这些类都被定义为模板的形式,可以为其指定具体的应用类型(即调用运算符的形参类型)。

![14-2](Image/14-2.png)
![14-2](Images/14-2.png)

关系运算符的函数对象类通常被用来替换算法中的默认运算符,这些类对于指针同样适用。

Expand All @@ -369,7 +369,7 @@ sort(nameTable.begin(), nameTable.end(), less<string*>());

标准库`function`类型是一个模板,定义在头文件*functional*中,用来表示对象的调用形式。

![14-3](Image/14-3.png)
![14-3](Images/14-3.png)

创建一个具体的`function`类型时必须提供其所表示的对象的调用形式。

Expand Down
2 changes: 1 addition & 1 deletion Chapter-15 Object-Oriented Programming/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ public:
};
```

![15-1](Image/15-1.png)
![15-1](Images/15-1.png)

类内使用`using`声明改变访问级别的规则同样适用于重载函数的名字。

Expand Down
2 changes: 1 addition & 1 deletion Chapter-16 Templates and Generic Programming/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ auto fcn(It beg, It end) -> decltype(*beg)

标准库在头文件*type_traits*中定义了类型转换模板,这些模板常用于模板元程序设计。其中每个模板都有一个名为`type`的公有类型成员,表示一个类型。此类型与模板自身的模板类型参数相关。如果不可能(或不必要)转换模板参数,则`type`成员就是模板参数类型本身。

![16-1](Image/16-1.png)
![16-1](Images/16-1.png)

使用`remove_reference`可以获得引用对象的元素类型,如果用一个引用类型实例化`remove_reference`,则`type`表示被引用的类型。因为`type`是一个类的类型成员,所以在模板中必须使用关键字`typename`来告知编译器其表示一个类型。

Expand Down
Loading

0 comments on commit e5cbbbe

Please sign in to comment.