[過去ログ] C++相談室 part164 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
953: (ワッチョイ 5d01-46Vy) 2023/10/24(火)13:10 ID:B30+3CR30(3/3) AAS
>>952
initializer_listでmoveできない問題なら>>939で良いのでは?
template化して関数名短くすれば使い心地は{}と
そう変わらんと思うが?
954: (ワッチョイ 8eca-ANn9) 2023/10/24(火)22:26 ID:0fDOryx60(1) AAS
文字コード周りだけは決着つけてくれ!
955(1): (ワッチョイ ba48-g88S) 2023/10/26(木)08:51 ID:+j1jszqL0(1) AAS
chatGPTが今ダウンしているので質問します
以下のC++コードでfirst->secondとなっている部分がよくわかりません
vector<pair<int, int>> A(N);
for(auto& [x, y] : A) cin >> x >> y;
unordered_map<int, int> X, Y;
for(auto& [x, y] : A){
x = X.try_emplace(x, X.size()).first->second;
y = Y.try_emplace(y, Y.size()).first->second;
}
try_emplaceはPair<iterator,bool>を返すオーバーロードがあるので
省1
956(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 8e3e-exru) 2023/10/26(木)09:25 ID:oN20rU1J0(1) AAS
>>955
格納しているのがペアなんだからペアの second 側が得られるってだけ。
イテレータは operator* や operator-> をオーバーロードしていて
要素へのポインタであるかのように扱えると考えていい。
957(1): (スププ Sd9a-Cy5w) 2023/10/26(木)22:18 ID:eAGx217zd(1) AAS
単に入れ子になってるだけ
ポインタの先の要素がまたポインタで指してるだけ
958: (ワッチョイ ba48-g88S) 2023/10/27(金)08:11 ID:IlYWK5hg0(1) AAS
>>956-957
ありがとうございました。
iteratorを返したらそのiteratorに対してさらにsecondを呼び出しているのですね
959: (ワッチョイ 5101-CP9B) 2023/10/29(日)23:41 ID:JPy8qBbk0(1) AAS
C++モジュールについて
・CMakeが3.26で実験的対応、3.28で正式対応
・g++は対応状況が良くないが、2024年第二4半期に対応できるとKitwareは考えている
・VS2022最新版内臓のCMakeバージョンは3.26
・Clangとclはモジュールに対応している
960: (ワッチョイ 13ad-c8RC) 2023/10/30(月)13:05 ID:bW5EQkS/0(1/3) AAS
Cスレで話題になっててちょっと疑問を質問
自分はgotoって全く使わないで書いているんだけど実際のところどうなんだろう
外部リンク:learn.microsoft.com
「可能な限り、goto ステートメントより break、continue、および return ステートメントを使用することをお勧めします。
ただし、break ステートメントはループの 1 つのレベルのみを終了するため、深い入れ子のループを終了するには goto ステートメントを使用する必要がある場合もあります。」
俺も深い入れ子のループを抜ける方法として
・ループ部分を関数化してreturn
・breakで抜けて if(/* 抜けた理由を再度評価 */) break; を繰り返す (※後述)
ということをしている
けどgotoで抜けるほうが楽だろうなと思うんだけど、まあ単純なバグ(プログラマーの見落とし)を除いてどういう問題があるんだろうか
省10
961: (アウアウウー Sad5-g+2W) 2023/10/30(月)13:37 ID:xnp7PI6ya(1) AAS
>深い入れ子のループを終了するには goto ステートメントを使用する必要がある場合もあります
って描いてあるしそれが問題とは言ってないんじゃないか
962: (ワッチョイ 297c-tLJy) 2023/10/30(月)14:24 ID:eEth4IuV0(1/4) AAS
とりあえずダイクストラ大先生の例の論文読もうぜ
963(1): (ワッチョイ 13ad-c8RC) 2023/10/30(月)15:01 ID:bW5EQkS/0(2/3) AAS
まあ問題あるならそもそも導入されるはずがないわけで問題ないのは分かるんだけど
「可能な限り〜お勧めします。」と言うように使用を推奨しない理由は何なのかなと
例えば特定の処理が飛ばされて動作しなくなる場合があるとかなんかな?と
964: (ワッチョイ 9b91-lnbO) 2023/10/30(月)15:54 ID:A0jdf3Dt0(1/6) AAS
それはrustのラベルbreakのような
安全なループの抜け方しか考えてないから安全で当たり前
c/c++のgotoはもっと凶悪なことができる
965: (ワッチョイ 297c-tLJy) 2023/10/30(月)16:23 ID:eEth4IuV0(2/4) AAS
C++のgotoはちゃんとデストラクタを呼んでくれるから、意外とそんなに破滅的なことにはならんのだよね
だからって多重ループ脱出以外で使おうとは思わんけど
966(1): (ワッチョイ 8101-VINR) 2023/10/30(月)16:30 ID:hnsSyQft0(1/11) AAS
俺は例外投げて脱出する
967(1): (ワッチョイ 9b91-lnbO) 2023/10/30(月)16:35 ID:A0jdf3Dt0(2/6) AAS
>>966
気軽に例外投げるとデバッガが使いづらくなるからやめときな
少なくとも仕事では
968(1): (ワッチョイ 13ad-c8RC) 2023/10/30(月)16:40 ID:bW5EQkS/0(3/3) AAS
多重ループ脱出で使っている人って多いんかな?
他にこういう使い方しているとかってない?
969: はちみつ餃子◆8X2XSCHEME (ワッチョイ 9b3e-g5YV) 2023/10/30(月)16:45 ID:I7fISnX+0(1) AAS
>>963
一般論としてはそのほうが分かりやすくなるからというだけのことだと思うよ。
ただ、それで分かりやすくならないとき、
チマチマした条件チェックであっちこっち行くよりは
流れをぶった切って goto したほうがいっそわかりやすいこともあるってのが
goto が必要な場面ってことなんだわ。
970(1): (ワッチョイ 8101-VINR) 2023/10/30(月)17:14 ID:hnsSyQft0(2/11) AAS
>>967
と言いますと?
971: (ワッチョイ d9ab-txvC) 2023/10/30(月)17:24 ID:9eqG7NVC0(1) AAS
ラムダ式にする
972: (ワッチョイ 297c-tLJy) 2023/10/30(月)17:57 ID:eEth4IuV0(3/4) AAS
>>968
自分としては多重ループ脱出がC++でのgotoの唯一の実用的な用途だと思ってる(とはいえめったに使わない)
Cなら疑似finally的な後処理に使うこともあるけど、それはC++ならRAIIにすべきだしな
それ以外の戻ったり余所のスコープに侵入したりはもちろんCでもC++でも論外
上下前次1-新書関写板覧索設栞歴
あと 30 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.015s