質問するログイン新規登録

回答編集履歴

1

追記1

2021/08/19 13:52

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -9,4 +9,37 @@
9
9
 
10
10
  単純に string用のvectorのイテレータ。それだけです。
11
11
 
12
- 名前が it_num になっているのはちょっと気になりますが、それだけです。
12
+ 名前が it_num になっているのはちょっと気になりますが、それだけです。
13
+
14
+ ------------------
15
+
16
+ [追記1]
17
+
18
+ > すみません。宣言時の::iterator がつくと何が生成されてるのか
19
+ を記載したかったです。
20
+
21
+ 実際のコード(実装)は見たことないですが、[ここ](https://ez-net.jp/article/BA/M8FWSt5L/uJoqEhJrMX1i/)のようになっているようです。
22
+
23
+ friendなクラスをイテレータとして定義して、こいつを介してメンバ変数にアクセスする。
24
+
25
+ このイテレータ系を使うやつは主にコンテナ系です。
26
+ (後はアルゴリズム系の関数とか)
27
+
28
+ たとえばstd::vectorであれば内部で動的配列を保持しています。
29
+ まあ、これの場合は単なる配列の動的版なので arr[i] のようにランダムアクセスすればいいだけですが、
30
+ std::listの場合はそうもいきません。
31
+
32
+ std::listは内部でリスト構造のデータ列を持っています。
33
+
34
+ データ構造とアルゴリズムを学んでいればわかるはずですが、リスト構造はランダムアクセスができません。
35
+ そこで イテレータと呼ばれる、ポインタのような動きをする(と言われている)やつを介してアクセスします。
36
+
37
+ つまり、
38
+
39
+ ```
40
+ vector<string>::iterator it_num;
41
+ ```
42
+
43
+ はstring用のvectorのためのイテレータが生成されています。
44
+
45
+ これによって、リスト構造とかのような、ランダムアクセスができないデータ構造でもデータを取り出したり出来ます。