回答編集履歴

1

追記1

2021/08/19 13:52

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -21,3 +21,69 @@
21
21
 
22
22
 
23
23
  名前が it_num になっているのはちょっと気になりますが、それだけです。
24
+
25
+
26
+
27
+ ------------------
28
+
29
+
30
+
31
+ [追記1]
32
+
33
+
34
+
35
+ > すみません。宣言時の::iterator がつくと何が生成されてるのか
36
+
37
+ を記載したかったです。
38
+
39
+
40
+
41
+ 実際のコード(実装)は見たことないですが、[ここ](https://ez-net.jp/article/BA/M8FWSt5L/uJoqEhJrMX1i/)のようになっているようです。
42
+
43
+
44
+
45
+ friendなクラスをイテレータとして定義して、こいつを介してメンバ変数にアクセスする。
46
+
47
+
48
+
49
+ このイテレータ系を使うやつは主にコンテナ系です。
50
+
51
+ (後はアルゴリズム系の関数とか)
52
+
53
+
54
+
55
+ たとえばstd::vectorであれば内部で動的配列を保持しています。
56
+
57
+ まあ、これの場合は単なる配列の動的版なので arr[i] のようにランダムアクセスすればいいだけですが、
58
+
59
+ std::listの場合はそうもいきません。
60
+
61
+
62
+
63
+ std::listは内部でリスト構造のデータ列を持っています。
64
+
65
+
66
+
67
+ データ構造とアルゴリズムを学んでいればわかるはずですが、リスト構造はランダムアクセスができません。
68
+
69
+ そこで イテレータと呼ばれる、ポインタのような動きをする(と言われている)やつを介してアクセスします。
70
+
71
+
72
+
73
+ つまり、
74
+
75
+
76
+
77
+ ```
78
+
79
+ vector<string>::iterator it_num;
80
+
81
+ ```
82
+
83
+
84
+
85
+ はstring用のvectorのためのイテレータが生成されています。
86
+
87
+
88
+
89
+ これによって、リスト構造とかのような、ランダムアクセスができないデータ構造でもデータを取り出したり出来ます。