>>290
set<>::iterator は const をつけていなくても set<>::const_iterator と同じくイテレータ≒ポインタに const 属性がつきます。
だから set<>::iterator p; …@、と宣言した場合の p には「終生」 const 属性がつきまとうことになります。
例えば@の p にポインタ演算子 * を適用して出来た表現「*p」が参照に読み替えることがあれば、その参照は const 参照でなければなりません。
もともと const 属性はポインタにつけて、const 属性のついたポインタに -> 演算子を使って出来たメンバ変数の値を変更しないようにコンパイル時に厳密にチェックする縛りです
c++ における参照は「機械的にポインタを使った書き方に書き直すこと」が可能(…A※)ですから、const なイテレータ(≒ポインタ)から生成した参照は const な参照にならざるを得ないのです
※Aは私の持論で、今回のお題でも参照をポインタに全部書き換えてやろうと試行錯誤していましたが、さすがに iostream や set で先に参照として宣言されているものを後からポインタにするのは不可能でした
頑張ってみたけれども、かえって意味不明な https://ideone.com/Yc0YvT ぐらいにしかならなかった、持論は修正しなくてはいけないなあ…
set は重複要素を許さない二分木構造です。二分木構造 set に要素を挿入するときに、要素の大小関係にしたがって二分木の形をくみ上げていきます。
だからすでに二分木に組み込まれてしまった要素が、後からほいほいと要素の内容を変えられてしまっては二分木構造に矛盾をきたし、役に立たなくなってしまう…
だから set にすでに組み込まれている要素をイテレータで走査するときは、そのイテレータ≒ポインタは、メンバの書き換えが不可能なイテレータとするしかないか、と私は考えます
提示していただいたソースを、上に述べた原則にしたがって、この原則に関係ない余分な部分を削り落として書く(あと、ちょっと簡略化もしています)と次のような感じでしょうか。
https://ideone.com/Zr1qIH
friend 略 operator<<(略 C const &obj) { ... }
にならなくてはならないのは set<C>::iterator は set<C>::const_iterator と同じだからです
friend bool operator<(C const &a, C const &b) は set への要素の挿入のときに使う比較関数ですが、比較作業以外に要素のメンバを変えるとか余計なことをさせないために、最初から const 参照で宣言するべきでしょうし、そうなっているみたいですね
しかし、この const 属性はプログラミング 3 年生くらいまでは、かなり分かりにくい縛りであることは、私の経験からもとても理解できます。
ポインタや参照をしっかり理解しないことには、わざわざ自分を縛る const のありがたみもよく理解できないだろうと、私も同情するのです。そういうときは、const_iterator p から作った表現 *p が展開された先の実際の表現を、「*p のコピー・オブジェクトのコピー」にするのがいいでしょう
上記のお題をこの方針で書くとこうなります。
https://ideone.com/G42gUs
いろいろ書きすぎたかもしれませんが、上に示した三つのソースコードを研究してみてください
探検
0からの、超初心者C++相談室
■ このスレッドは過去ログ倉庫に格納されています
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】盗難車ひき逃げで歩行者ら12人死傷 逃走した“運転手”の37歳男を逮捕 東京・足立区 [Ailuropoda melanoleuca★]
- 東京・足立区のひき逃げ事故 警視庁が運転手とみられる人物確保 窃盗容疑で男に逮捕状 80代男性の死亡確認、20代女性心肺停止 ★7 [Ailuropoda melanoleuca★]
- 石破前総理「どうすれば台湾有事にならないかを考えるべき」 [1ゲットロボ★]
- 毛寧(もう・ねい)報道官 「日本は実際の行動で対話への誠意を示すべき」 中国、高市首相に改めて発言撤回を要求 [ぐれ★]
- 防衛費増額「賛成」62・8% 「反対」32・2%を大きく上回る 賛成「18~29歳で8割」世代差あらわ 産経FNN合同世論調査 ★2 [尺アジ★]
- 『ちいかわ』映画化で2026年夏公開 『映画ちいかわ 人魚の島のひみつ』脚本ナガノ氏で制作はCygamesPictures [征夷大将軍★]
- WBC世界バンタム級 那須川天心 vs 井上拓真 4
- WBC世界バンタム級 那須川天心 vs 井上拓真 3
- WBC世界バンタム級 那須川天心 vs 井上拓真 5
- 【NJPW】新日本プロレスワールド part.2414
- 競輪実況★1610
- 競輪実況★1609
- 韓国大統領「関わりたくないので高市と中国の対立は冷静に見守る」 [931948549]
- 【実況】博衣こよりとホロックスのえちえちウミガメのスープ🧪 ★2
- 【実況】博衣こよりとホロックスのえちえちウミガメのスープ🧪
- 松山千春「総理の台湾発言、撤回する時期いくらでもあった。撤回するなら撤回する。別に思っていいんですよ。それを口に出すところがね [256556981]
- 井川意高「偏差値35に総理させるのか?」 [834922174]
- 白上フブキ🦊🤘とすこん部🌽のお🏡
