回答編集履歴
5
スライスと実体のライフタイムの長さの要件が逆になっていたので修正しました
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
スライスは型に参照`&`が現れているように、それ自体は値の実体を持たず、別の場所にある実体(配列、`Vec`など)を参照します。スライスは実体なしには存在できません。つまりスライスのライフタイム(生存期間)は実体のライフタイムよりも
|
33
|
+
スライスは型に参照`&`が現れているように、それ自体は値の実体を持たず、別の場所にある実体(配列、`Vec`など)を参照します。スライスは実体なしには存在できません。つまりスライスのライフタイム(生存期間)は実体のライフタイムよりも短くなければなりません。
|
34
34
|
|
35
35
|
|
36
36
|
|
4
私のinsert関数にバグがあったため修正しました
test
CHANGED
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
if v.is_empty() {
|
74
74
|
|
75
|
-
|
75
|
+
vec![x]
|
76
76
|
|
77
77
|
} else {
|
78
78
|
|
3
配列型の表記の間違いを修正しました
test
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
最初に知っておいてほしいのは、`&[T]`はスライス型であって、配列型ではないことです。配列型は`
|
1
|
+
最初に知っておいてほしいのは、`&[T]`はスライス型であって、配列型ではないことです。配列型は`[T; 10]`のように、要素の型と要素数が入った型になります。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
`insert()`関数は任意の長さ(`N`とします)の配列を引数に取り、長さ`N + 1`の配列を返しますが、Rustではそのような関数は定義できません。
|
2
6
|
|
3
7
|
|
4
8
|
|
2
説明を微修正
test
CHANGED
@@ -116,8 +116,8 @@
|
|
116
116
|
|
117
117
|
|
118
118
|
|
119
|
-
なお上の実装では、`insert()`関数が呼ばれるたびに
|
119
|
+
なお上の実装では、`insert()`関数が呼ばれるたびに新しいベクタを作るため効率はよくありません。これはもし配列が使えたとしても効率の面では同じです。
|
120
120
|
|
121
121
|
|
122
122
|
|
123
|
-
もし`isort()`が引数にとったスライス(`&mut [T]`)をその場で変更してもよいのなら、効率の良い実装もできます。(その場合はかなり違ったプログラムになるので例は割愛します)
|
123
|
+
もし`isort()`と`insert()`が引数にとったスライス(`&mut [T]`)をその場で変更してもよいのなら、効率の良い実装もできます。(その場合はかなり違ったプログラムになるので例は割愛します)
|
1
誤字を修正しました
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
// これならコンパイルできるが、引数に長さ1の配列しか取れない
|
14
14
|
|
15
|
-
fn insert()<T: Ord+Clone>(x: T, v: [T;
|
15
|
+
fn insert()<T: Ord+Clone>(x: T, v: [T; 1]) -> [T; 2] {
|
16
16
|
|
17
17
|
```
|
18
18
|
|
@@ -48,7 +48,7 @@
|
|
48
48
|
|
49
49
|
|
50
50
|
|
51
|
-
残念ながら、このプログラムですと
|
51
|
+
残念ながら、このプログラムですと配列またはスライスを返すことはできません。
|
52
52
|
|
53
53
|
|
54
54
|
|
@@ -116,4 +116,8 @@
|
|
116
116
|
|
117
117
|
|
118
118
|
|
119
|
+
なお上の実装では、`insert()`関数が呼ばれるたびに毎回新しいベクタを作るため効率はよくありません。これはもし配列が使えたとしても効率の面では同じです。
|
120
|
+
|
121
|
+
|
122
|
+
|
119
|
-
|
123
|
+
もし`isort()`が引数にとったスライス(`&mut [T]`)をその場で変更してもよいのなら、効率の良い実装もできます。(その場合はかなり違ったプログラムになるので例は割愛します)
|