C++相談室 part164

レス数が950を超えています。1000を超えると書き込みができなくなります。
2023/05/09(火) 11:50:52.06ID:EYc2I7oW0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part163
https://mevius.5ch.net/test/read.cgi/tech/1672409791/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/10/14(土) 18:20:44.57ID:ma8uiWBB0
>>880
正論

>>879
書いてないと主張するお前が、名前が書かれた文章前半の一部のみ勝手に正当主張をしてるのはわかってるんだけど、後半の文章についてはどう考えてるの?
882デフォルトの名無しさん (ワッチョイ 5901-Vk26)
垢版 |
2023/10/14(土) 19:26:26.32ID:up3P3K8x0
>>881
>書いてないと主張するお前が、名前が書かれた文章前半の
>一部のみ勝手に正当主張をしてるのはわかってるんだけど、
>後半の文章についてはどう考えてるの?
どれか分からんからきちんと書け
2023/10/14(土) 21:50:40.28ID:ma8uiWBB0
横から入ってきた割に、話が通じないやつって初めて見た
2023/10/14(土) 21:57:24.93ID:up3P3K8x0
>>883
プログラム書いてるだろうに文章が下手過ぎるから話が通じない
俺は侮辱するようなことは一言も書いていない
別人が書いたのを読み違えてるんだよ
2023/10/15(日) 06:50:14.19ID:DwcyuqQy0
基地外のスレチ荒らしはスルーしようぜ
2023/10/15(日) 07:30:07.34ID:T2NVqJIH0
>>864は覚えておくわ
887デフォルトの名無しさん (ワッチョイ 5901-Vk26)
垢版 |
2023/10/15(日) 11:44:46.43ID:S1qRngxA0
>>>886
ちゃんと覚えとけよ
それは俺じゃないからね
2023/10/15(日) 17:41:10.31ID:9kWoH1jw0
ハゲはナニやってもハゲるらしいからな
理由なんて無いだろう
2023/10/15(日) 17:43:05.48ID:9kWoH1jw0
ハゲるヤツはナニやってもハゲるらしいからな
そもそも理由なんて無いのだろう
2023/10/15(日) 21:12:08.28ID:ehVuw9SG0
いつまでもお傍にいます、最後まで…
2023/10/16(月) 08:48:43.37ID:yu+2eKsI0
Stroustrupのことはハゲハゲ言うくせに江添に対しては厳しいんだなw
2023/10/17(火) 17:04:23.91ID:zRs2E77Cd
言う程ハゲてない
まだ大丈夫
2023/10/17(火) 17:04:42.90ID:zRs2E77Cd
言う程ハゲてない
まだ大丈夫
2023/10/17(火) 17:55:21.31ID:it1TRy+pa
ひさしぶりにこのスレにきてわかったことがひとつある

C++はハゲと相性が良い
2023/10/17(火) 19:10:02.16ID:LcuTSSJS0
C++使うとハゲるって当初噂になったぐらいだが
知らんのか
2023/10/17(火) 20:35:53.51ID:B/3DhPmO0
空いたプランクを埋めるためにC++言語仕様を高速に無理矢理理解しようとすると却ってストレスがたまってハゲることになる恐ろしい言語
2023/10/17(火) 21:21:23.39ID:WuBQOYXz0
>>895
MJD?

Miwa C++ のエピスメーテーさんもHAGEなの?
2023/10/18(水) 21:04:49.19ID:UzfqKL8d0
禿げるというより若白髪は明らかに増えたわ
2023/10/18(水) 21:21:08.16ID:ELvl69q70
いや、お前はもう若くはない
2023/10/18(水) 21:22:58.52ID:ELvl69q70
いや、お前はもう若くはない
2023/10/18(水) 21:25:02.33ID:ELvl69q70
もう若くはないのだ
2023/10/18(水) 21:59:07.00ID:eoT4PoLM0
時期を逸するというのはなんとも悲しいものだ
取り返しはつかない
2023/10/18(水) 22:40:09.97ID:tODhST9E0
C++とMFCのコンボで世の中の何本の毛根が失われたのだろう
2023/10/18(水) 22:52:13.26ID:eoT4PoLM0
取り返しはつかない
2023/10/19(木) 22:15:33.96ID:PH9oNQB60
質問なのですがサイズnのstd::vector<T> vecに対してi番目(i=0, 1, 2, ..., n)の要素の直前に要素elemを1個挿入する(ただしi=nは末尾に追加と解釈する
の書き方はどうすればいいですの?
とりま2種類考えた、
1) size_t sz = vec.size();
  auto ins_it = (i < sz) ? std::next(vec.begin(), i) : vec.end();
  vec.insert(ins_it, elem);
2) size_t sz = vec.size();
  if (i < sz) { vec.insert(std::next(vec.begin(), i), elem); }
  else { vec.resize(i + 1, elem); }
906デフォルトの名無しさん (ワッチョイ 797f-/4nw)
垢版 |
2023/10/19(木) 23:37:01.14ID:49m1KrYl0
vec.insert(vec.begin() + i, elem);
2023/10/20(金) 09:00:04.92ID:Z7DUQLh+0
simple is best よ
何事も
908デフォルトの名無しさん (スフッ Sd33-Kt/B)
垢版 |
2023/10/20(金) 09:44:04.99ID:JTOR6W7Wd
だから I hate C++ の Matz はまだフサフサなのか
2023/10/20(金) 15:53:09.23ID:IDnubi5y0
コードの内容なんか忘れた半年後に
再びコード見てその瞬間、分かるように書くのが一番
その為のSimple is bestに同意
2023/10/20(金) 16:04:48.20ID:+Ixb2Hv20
読み取りやすいように書くのは大事だけど、少し汚くても
わかりやすい名前を付けておけば割となんとかなる。
2023/10/20(金) 20:55:51.96ID:jh4JxiwB0
おっと、名前付けの話?オッチャン持論語っちゃう

関数に長い名前つけるのはありと思うが、変数名は宣言箇所にコメント書いて2文字とか短い変数名が好き

ワシは元々BASICから始まってSmalltalkを学んだクチだけど、一時期のjavaみたいななんでも長い名前にするやつ大っきらい。Cの母音ラクダ方式大好き
2023/10/21(土) 00:04:43.68ID:JSr5Bd510
お前の好き嫌いでは議論にならん
優劣を語れよ、ジジイ
2023/10/21(土) 01:04:06.34ID:m23W7dra0
>>912
が優劣について数字を出して語ってくれるそうです
どうぞw
2023/10/21(土) 02:43:39.26ID:WDz67hDs0
C++ はある程度は汚いものだろう。
隅々まで綺麗にしようと腐心するよりは
少なくとも部品のインターフェイスくらいはまともにして
外側に対しては綺麗なふりをするくらいが手頃な妥協点だと思う。
逆にミクロ的にスマートに書けていても
抽象化が駄目だと使いにくいよ。

内も外も綺麗ならそれに越したことはないけど
そうもいかないのが現実だからね。
2023/10/21(土) 08:17:46.79ID:pQG7G9ym0
>>906
天才か!
なんかこの前動かしたら駄目だった気がしたけど
今やったら動いたわサーセン;;;
2023/10/21(土) 12:13:35.82ID:3FTa9ZLeM
vectorなのかvecなのかは言語開発者がそうと決めたからそうなってるだけ
昔はコード補間もなくx-windowのアホみたいな長い呪文APIぶち込んでたけど今もそれだったらぶち切れてる

意外なことに開発環境が変わればいろいろ変わる
2023/10/21(土) 12:24:11.96ID:3FTa9ZLeM
今windowの更にクソ長い基地外じみたAPI打ってるのもコード補完があるから
2023/10/21(土) 13:25:34.47ID:oEOsfkqwa
名前の長い短かいについては上述のとおり技術の進歩、開発環境の変化で落しどころがかわってくるが
俺的にはむしろネーミングのセンスのほうが気になる
俺がまだフサフサだったころはイキって一般によく使われる単語とちょっと違う単語をわざわざ探すようなことをしていたが
頭髪が薄くなるに従ってそういうことはくだらない事と思うようになり
今はできるだけベタな誰が見ても即座に意味がつかめる、あえてダッサいネーミングをするよう心がけてる
例:データを吸いあげて収納するメソッド名
フサフサ俺がつけがちな名前 → .BeamMeUp()
ハゲ俺がつける名前 → .LoadData()
2023/10/21(土) 13:28:07.89ID:lPxmC+mr0
>>915
std::vector のイテレータの場合に限らず
ランダムアクセスイテレータは difference_type との加算が出来ることになってる。
https://timsong-cpp.github.io/cppwp/n3337/iterator.requirements#tab:iterator.random.access.requirements
2023/10/21(土) 13:55:07.32ID:QfWCszfk0
>>918
仕事でやってたら初日で怒られるレベル
2023/10/21(土) 14:25:15.02ID:ifbOBJO10
>データを吸いあげて収納する
ハゲなのに5W1Hすら知らないと見える
922デフォルトの名無しさん (ワッチョイ 8eca-ANn9)
垢版 |
2023/10/21(土) 19:03:13.06ID:l7vz3TvG0
恥ずかしながら学生の頃はドイツ語で命名してましてねフフフ
2023/10/21(土) 19:20:36.30ID:5c+gSFSX0
korewahennsuudesu
2023/10/21(土) 20:59:24.58ID:pQG7G9ym0
>>919
レス引用が分かりにくくてスマンカッタorz
そこではなくて挿入位置にsize()まで指定してたら末尾に要素が追加にできるところ
std::vector<int> vec = { 1, 2, 3 };
vec.insesrt(vec.begin() + vec.size(), 4);
cout << vec << endl; // ( 1 2 3 4 )
925デフォルトの名無しさん (ワッチョイ 6501-6i8i)
垢版 |
2023/10/21(土) 21:41:14.77ID:BercqiEL0
ラズパイレートでいうと
民主党政権の頃は1ドル80円だったけど
いまは1ドル200円
926デフォルトの名無しさん (ワッチョイ 6501-6i8i)
垢版 |
2023/10/21(土) 21:41:30.90ID:BercqiEL0
ラズパイレートでいうと
民主党政権の頃は1ドル80円だったけど
いまは1ドル200円
927デフォルトの名無しさん (ワッチョイ 6501-6i8i)
垢版 |
2023/10/21(土) 22:50:32.79ID:BercqiEL0
>>921
5W1HはMITが提唱したんじゃなかったっけ
2023/10/22(日) 12:33:14.88ID:x1FYC/BU0
変数でも関数でも
初見もしくは内容忘れた自分が
読んだとき何をやってるか分かるような名前付けが大事だと思う
よって長さは常識の範囲内なら長い方が良いかな

どうでもいいループ変数にindex2SearchArgumentHaystackとか
書いてたら殺意を覚えるけどさ
2023/10/22(日) 17:33:51.66ID:Ih9eQULqM
GetSelectedPersonDataFromLiveDBIfNotExistsReadDefaultValueFromSettingFileType2022Ex
2023/10/22(日) 17:36:33.94ID:+fVR99EM0
= 1 ;
931デフォルトの名無しさん (ワッチョイ 6501-6i8i)
垢版 |
2023/10/22(日) 19:20:31.79ID:/8xzlJDV0
モジュールはまだ使えんのか?
932デフォルトの名無しさん (ワッチョイ 8e3b-xUKY)
垢版 |
2023/10/22(日) 20:40:59.32ID:XK8cC57k0
リテラルで簡潔に書けるのでみんな初期化子リストばんばん使ってると思うけど
initializer_listって必ずコピーが発生するのな
non copyableなクラスが使えなくて不便なんだが、回避策ない?
2023/10/22(日) 20:47:43.40ID:tZaS4o4u0
>>932
>non copyableなクラスが使えなくて不便なんだが、回避策ない?
moveすれば?
2023/10/22(日) 23:26:18.52ID:XK8cC57k0
>>933
できないんだよ
2023/10/22(日) 23:33:55.26ID:tZaS4o4u0
>>934
???
どんなコードで問題出てるの?
936デフォルトの名無しさん (ワッチョイ 8e3b-xUKY)
垢版 |
2023/10/23(月) 01:32:53.76ID:sueaiNV30
>>935
https://wandbox.org/permlink/n0KXbXrmLzHDl6KU

次のコードがコンパイルできない

struct A {
 A(int) {}
 A(const A&) = delete;
};

int main()
{
 std::vector<A> v = { 1, 2, 3 };
}
2023/10/23(月) 05:17:34.59ID:RG/DfB7W0
>933, >>935
https://www.google.com/search?q=initializer_list+move
クソ回答する前にググれよ
2023/10/23(月) 09:29:50.40ID:9KLj8HWs0
>>936,937
あれ?
$ cat test.cpp
#include <iostream>
using namespace std;
struct A {
A () {cout << "construct" << endl;}
A (const A &p) = delete;
A (A &&p) {cout << "move" << endl;}
};
void func (initializer_list <A> p) {
cout << "func" << endl;
}
int main () {
A a0;
A a1;
func ({move (a0), move (a1)});
return 0;
}
$ g++ test.cpp
$ ./a.out
construct
construct
move
move
func
2023/10/23(月) 10:27:22.01ID:9KLj8HWs0
だめかなぁ...
#include <vector>
struct A {
A(int) {}
A(const A&) = delete;
A(A&&) = default;
};
std::vector <A> construct (std::initializer_list <A> p) {
std::vector <A> result;
for (auto itr {p.begin ()}, end {p.end ()}; itr != end; ++ itr)
result.push_back (std::move (const_cast <A &> (*itr)));
return result;
}
int main()
{
std::vector<A> v = construct ({ 1, 2, 3 });
}
2023/10/23(月) 11:36:11.62ID:OKLUF2xV0
>>936
コピコン消したいなら代入オペレータ用意してやらんとダメだろ
2023/10/23(月) 13:23:41.68ID:1EMVV/4H0
initializer_list<A&&>が作れないから波括弧初期化できないって話か
なるほどね
2023/10/23(月) 19:21:53.26ID:RG/DfB7W0
initializer_list作るとこまでは出来てもムーブで取り出せないのよ
だからvectorのコンストラクタにinitializer_listで渡すとエラー出るし、>>939のように
const外して一つずつ突っ込むとかしなきゃいけなくなる
ムーブ可能にする提案は出てるらしいけど
https://cpplover.blogspot.com/2014/11/2014-10-pre-urbana-mailings-n4160-n4169.html?m=1
2023/10/24(火) 05:35:10.47ID:RZM2X1OT0
https://wandbox.org/permlink/h9ZXqkhA56d7EOYP
std::vectorだからどうしようもないけど、自作クラスならinitializer_listよりも可変長テンプレートをオススメしたい
これならコピー不可(ムーブのみ)なクラスでも集成体初期化出来る
(ただしコンセプトかenable_ifでAまたはAに暗黙変換可能な型に限定すべき、enable_ifでもメタプログラミングで条件式作れる)
2023/10/24(火) 05:38:03.34ID:RZM2X1OT0
あ、すまんコメントのとこだけどis_convertible_vの引数は逆だった
2023/10/24(火) 05:42:10.71ID:RZM2X1OT0
もう一つ訂正すまん、集成体初期化じゃないな一様初期化かリスト初期化かorz
2023/10/24(火) 08:43:43.05ID:NeqpGeoJd
教訓
std::vectorは使い物にならない
947デフォルトの名無しさん (ワッチョイ 5d01-46Vy)
垢版 |
2023/10/24(火) 11:05:08.48ID:B30+3CR30
>>946
何で?
2023/10/24(火) 11:09:20.45ID:AiEp9cgJ0
もうC++の仕様拡張はもう限界なんだよ
あっちを立てればこっちが立たずが毎回問題になる
949デフォルトの名無しさん (ワッチョイ 5558-8kgw)
垢版 |
2023/10/24(火) 11:19:38.47ID:1IilAibW0
std2 作ってゼロからやり直さないと C++はどうにもならんね
2023/10/24(火) 11:40:18.75ID:nK1YbT6/0
iostreamの二の足を踏みそうだ
2023/10/24(火) 12:18:26.26ID:B30+3CR30
>>946,948-950
具体的に議論しようぜ
2023/10/24(火) 12:59:19.46ID:2UheMrybF
>>946
deque の方が常に良いことが多いと思う

initializer_list でうまくいかんときは
make_tuple か tie でごまかしたことがある気がするけど
あれも move じゃなくて copy だったかな

最近は Rust の方がその辺は楽な気がするな
2023/10/24(火) 13:10:28.54ID:B30+3CR30
>>952
initializer_listでmoveできない問題なら>>939で良いのでは?
template化して関数名短くすれば使い心地は{}と
そう変わらんと思うが?
954デフォルトの名無しさん (ワッチョイ 8eca-ANn9)
垢版 |
2023/10/24(火) 22:26:14.45ID:0fDOryx60
文字コード周りだけは決着つけてくれ!
2023/10/26(木) 08:51:51.55ID:+j1jszqL0
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>を返すオーバーロードがあるので
firstまではわかるもののそこからさらにsecondとすると何がおきるのでしょうか
2023/10/26(木) 09:25:01.17ID:oN20rU1J0
>>955
格納しているのがペアなんだからペアの second 側が得られるってだけ。
イテレータは operator* や operator-> をオーバーロードしていて
要素へのポインタであるかのように扱えると考えていい。
957デフォルトの名無しさん (スププ Sd9a-Cy5w)
垢版 |
2023/10/26(木) 22:18:49.00ID:eAGx217zd
単に入れ子になってるだけ
ポインタの先の要素がまたポインタで指してるだけ
2023/10/27(金) 08:11:42.47ID:IlYWK5hg0
>>956-957
ありがとうございました。
iteratorを返したらそのiteratorに対してさらにsecondを呼び出しているのですね
959デフォルトの名無しさん (ワッチョイ 5101-CP9B)
垢版 |
2023/10/29(日) 23:41:12.89ID:JPy8qBbk0
C++モジュールについて
・CMakeが3.26で実験的対応、3.28で正式対応
・g++は対応状況が良くないが、2024年第二4半期に対応できるとKitwareは考えている
・VS2022最新版内臓のCMakeバージョンは3.26
・Clangとclはモジュールに対応している
2023/10/30(月) 13:05:26.07ID:bW5EQkS/0
Cスレで話題になっててちょっと疑問を質問
自分はgotoって全く使わないで書いているんだけど実際のところどうなんだろう

https://learn.microsoft.com/ja-jp/cpp/cpp/goto-statement-cpp?view=msvc-170
「可能な限り、goto ステートメントより break、continue、および return ステートメントを使用することをお勧めします。
ただし、break ステートメントはループの 1 つのレベルのみを終了するため、深い入れ子のループを終了するには goto ステートメントを使用する必要がある場合もあります。」

俺も深い入れ子のループを抜ける方法として
・ループ部分を関数化してreturn
・breakで抜けて if(/* 抜けた理由を再度評価 */) break; を繰り返す  (※後述)
ということをしている

けどgotoで抜けるほうが楽だろうなと思うんだけど、まあ単純なバグ(プログラマーの見落とし)を除いてどういう問題があるんだろうか

for ( i = 0; i < 10; i++ )
{
 printf_s( "Outer loop executing. i = %d\n", i );
 for ( j = 0; j < 2; j++ )
 {
  printf_s( " Inner loop executing. j = %d\n", j );
  if ( i == 3 ) break; // 内側のループ抜け
 }
 if ( i == 3 ) break; // 外側のループ抜け
}
961デフォルトの名無しさん (アウアウウー Sad5-g+2W)
垢版 |
2023/10/30(月) 13:37:46.82ID:xnp7PI6ya
>深い入れ子のループを終了するには goto ステートメントを使用する必要がある場合もあります
って描いてあるしそれが問題とは言ってないんじゃないか
2023/10/30(月) 14:24:40.02ID:eEth4IuV0
とりあえずダイクストラ大先生の例の論文読もうぜ
2023/10/30(月) 15:01:52.03ID:bW5EQkS/0
まあ問題あるならそもそも導入されるはずがないわけで問題ないのは分かるんだけど
「可能な限り〜お勧めします。」と言うように使用を推奨しない理由は何なのかなと
例えば特定の処理が飛ばされて動作しなくなる場合があるとかなんかな?と
2023/10/30(月) 15:54:27.55ID:A0jdf3Dt0
それはrustのラベルbreakのような
安全なループの抜け方しか考えてないから安全で当たり前
c/c++のgotoはもっと凶悪なことができる
2023/10/30(月) 16:23:23.04ID:eEth4IuV0
C++のgotoはちゃんとデストラクタを呼んでくれるから、意外とそんなに破滅的なことにはならんのだよね
だからって多重ループ脱出以外で使おうとは思わんけど
2023/10/30(月) 16:30:54.25ID:hnsSyQft0
俺は例外投げて脱出する
2023/10/30(月) 16:35:01.03ID:A0jdf3Dt0
>>966
気軽に例外投げるとデバッガが使いづらくなるからやめときな
少なくとも仕事では
2023/10/30(月) 16:40:27.98ID:bW5EQkS/0
多重ループ脱出で使っている人って多いんかな?
他にこういう使い方しているとかってない?
2023/10/30(月) 16:45:14.84ID:I7fISnX+0
>>963
一般論としてはそのほうが分かりやすくなるからというだけのことだと思うよ。

ただ、それで分かりやすくならないとき、
チマチマした条件チェックであっちこっち行くよりは
流れをぶった切って goto したほうがいっそわかりやすいこともあるってのが
goto が必要な場面ってことなんだわ。
2023/10/30(月) 17:14:03.48ID:hnsSyQft0
>>967
と言いますと?
2023/10/30(月) 17:24:30.69ID:9eqG7NVC0
ラムダ式にする
2023/10/30(月) 17:57:47.45ID:eEth4IuV0
>>968
自分としては多重ループ脱出がC++でのgotoの唯一の実用的な用途だと思ってる(とはいえめったに使わない)
Cなら疑似finally的な後処理に使うこともあるけど、それはC++ならRAIIにすべきだしな
それ以外の戻ったり余所のスコープに侵入したりはもちろんCでもC++でも論外
2023/10/30(月) 18:39:22.51ID:VfsLhOLn0
何度も繰り返すgotoの話になると人が湧くな
2023/10/30(月) 18:54:25.65ID:A0jdf3Dt0
>>970
VSのデバッガは例外投げられるとメッセージでる(設定変えればオフにはできる)
また設定によってはブレイクする
正常処理のくせに頻繁に例外投げられると非常にうざいし、本当の異常を見過ごす
975デフォルトの名無しさん (ワッチョイ 5101-CP9B)
垢版 |
2023/10/30(月) 19:04:07.11ID:qWSrxYwr0
switchとgoto組み合わせて状態機械作ってる
2023/10/30(月) 19:54:14.15ID:A0jdf3Dt0
gcc拡張のlabelのアドレスとれるやつとかな
昔はイキって使ってたわ
2023/10/30(月) 20:16:27.75ID:hnsSyQft0
>>974
そりゃうざいデフォルト設定だな
ループの脱出に限らず例外くらい普通に使うやろ?
ちゃんと切っとけ
2023/10/30(月) 20:43:41.27ID:A0jdf3Dt0
>>977
例外が起こったときは何かおかしいことが起こっている予兆と考える防御的なVSをおれは支持する
だいたい例外安全って何それ?ってレベルのやつも多いだろ
例外で遊ぶのは趣味のときだけにしとけ
2023/10/30(月) 20:48:14.67ID:JbGfWzUOM
ループ脱出レベルで例外を使うのは変だと感じる
関数抜けないのに例外なんて…
2023/10/30(月) 20:54:46.61ID:JbGfWzUOM
んで大昔に例外に似た機能のFound文Match文とか妄想してたんだな

実質タダのgoto文
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況