>>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++相談室
■ このスレッドは過去ログ倉庫に格納されています
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】セ・リーグCS第3戦 T 0-4 DB [10/16] DeNA3連勝日本シリーズ王手 佐野3ラン、片山7回無失点 阪神3試合連続完封負け ★2 [鉄チーズ烏★]
- 【高市総理】外食産業支援でプレミアム商品券なども検討 [ぐれ★]
- 【野球】パ・リーグCS第3戦 H 6-2 F [10/16] 福岡ソフトバンクホークス日本シリーズ進出決定 日本ハム3タテくらい敗退 [鉄チーズ烏★]
- EUのEV優遇制度案、日本車を除外 独仏が合意 [少考さん★]
- 【竹中平蔵】「金銭解雇ルールを作れ」 「全然仕事できないのにクビにできない」正社員に持論 ★3 [煮卵★]
- 【お詫び】NTTドコモ、緊急地震速報が配信されなかった事象について 「システム不具合」 [おっさん友の会★]
- 【実況】博衣こよりのえちえちホロ甲2026-前夜祭-🧪★5
- スバルーナ🪿🩷🍬のお🏰
- メ ロ ス は
- 【動画】INMU KINGヒトラーVer完全版、ついにリリースWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW [841411289]
- 【急募】「ヤレる女が多い都道府県」→どこを思い浮かべた? [467579604]
- ストリートファイター ザ・ムービー観てきた