[過去ログ] C++相談室 part164 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
135: (ワッチョイ 0b6e-jMfM) 2023/05/29(月)17:54 ID:I9NccWA+0(1/2) AAS
会社で嫌われるイヤな奴の特徴を全てプログラミングされたAIとか?
136: (ワッチョイ 4bc0-3xLk) 2023/05/29(月)18:33 ID:IrTtCTAo0(1) AAS
AIに相談したせいで鬱になって辞める社員が続出しそうだな
AIポイゾニングは新手のリモート攻撃として流行るかもね
137: (ワッチョイ 0b6e-jMfM) 2023/05/29(月)20:15 ID:I9NccWA+0(2/2) AAS
ヘイテトリスみたいな社員AI
138
(1): (ワッチョイ 0128-w4Nq) 2023/06/04(日)08:29 ID:5jvZ+YKl0(1/3) AAS
質問ですがstd::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい、と言う場合どうす
れば良いの?
ダチャい書き方ならできうるけど人類はいつまでstrtod()や&(str[0])……
std::string str;
str ← なんか文字列入る
char* end;
省6
139: (ワッチョイ 61f0-7HAn) 2023/06/04(日)08:38 ID:Wo5LOckB0(1) AAS
>>138 まず、こちらへ
0からの、超初心者C++相談室
2chスレ:tech
140: (ワッチョイ 0128-w4Nq) 2023/06/04(日)09:23 ID:5jvZ+YKl0(2/3) AAS
誘導されたので誘導先に建てたはサーセン、
141: (オイコラミネオ MMe9-N/Lw) 2023/06/04(日)11:01 ID:/SPLhkOjM(1) AAS
文字列(char配列)とstringの仕組みはダサいけど他も大体これ
さらにspanもいれる
どこも大体同じ
142
(1): (ワッチョイ edf0-+LPJ) 2023/06/04(日)18:06 ID:HhL1J/ge0(1) AAS
しかしstodの「文字列が数値で始まる場合、数値化不可能な文字があっても例外は投げずに数値化出来るところまでの部分で数値化する」ってむしろ不便だよな。
143: (ワッチョイ eefb-dBHf) 2023/06/04(日)18:43 ID:XolxJINE0(1/6) AAS
charに変換して文字コード比較して範囲内外で変換分ける処理がシンプルじゃね
144: (ワッチョイ eefb-dBHf) 2023/06/04(日)18:44 ID:XolxJINE0(2/6) AAS
速度気になるなら二分探索の処理に追加してやればいいし
145: (ワッチョイ eefb-dBHf) 2023/06/04(日)18:45 ID:XolxJINE0(3/6) AAS
再帰処理でやってもいいかな
146: (ワッチョイ eefb-dBHf) 2023/06/04(日)18:45 ID:XolxJINE0(4/6) AAS
順序保証したいならリンクリストもありか
147: (ワッチョイ eefb-dBHf) 2023/06/04(日)18:46 ID:XolxJINE0(5/6) AAS
ちんこ痒い
148: (ワッチョイ a101-tVFH) 2023/06/04(日)18:58 ID:ym4W3arT0(1) AAS
リンクトリストな
149: (ワッチョイ eefb-dBHf) 2023/06/04(日)19:08 ID:XolxJINE0(6/6) AAS
内挿探索でも良さそう
150: (ワッチョイ a236-OEcF) 2023/06/04(日)20:01 ID:0KyMklrL0(1) AAS
STLへの多重配列クラス追加まだ?
151
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ c23e-N/Lw) 2023/06/04(日)22:37 ID:MHoxWKtY0(1/2) AAS
>>142
トークナイズするときに便利。
文字列が数値表現だけになっている状態を扱うことってそんなになくない?
なんらかの文字列から取り出す操作になることは多いし、
それを前提として考えたら自然な設計だと思う。
152
(1): (ワッチョイ 0128-w4Nq) 2023/06/04(日)22:54 ID:5jvZ+YKl0(3/3) AAS
>>151
>なんらかの文字列から取り出す操作になることは多いし、
まさにそれやが
std::stod()ではどこまで読んだのかわからないから取り出せない……
153: はちみつ餃子◆8X2XSCHEME (ワッチョイ c23e-N/Lw) 2023/06/04(日)23:07 ID:MHoxWKtY0(2/2) AAS
>>152
わかるが。
154
(1): (ワッチョイ 8d7c-vcK2) 2023/06/04(日)23:16 ID:bxWaSYac0(1) AAS
仕様も確認できない奴が仕様に文句付けるとかお笑いだわ
155: (ワッチョイ b901-1DxI) 2023/06/04(日)23:21 ID:QWRuQk/m0(1) AAS
勉強になるなぁ
boost::lexical_cast
ばっか使ってきた
156: (ワッチョイ 0128-w4Nq) 2023/06/05(月)01:56 ID:yTJt/rkc0(1/4) AAS
>>154
仕様を確認して文句つけているのだから無問題
157: (ワッチョイ 0128-w4Nq) 2023/06/05(月)02:01 ID:yTJt/rkc0(2/4) AAS
つか自分のスキルに合わせて仕様を変えてしまう香具師よりはマシ
158: (ワッチョイ 0128-w4Nq) 2023/06/05(月)02:39 ID:yTJt/rkc0(3/4) AAS
つか初心者スレで今教えてもらったわサーセン;;;
std::stod()の第2引数でどこまで読んだのかわかるのかそうか、、、
159: (アウアウウー Sac5-Rr/m) 2023/06/05(月)09:40 ID:ejs/048Ga(1) AAS
1e-3
0.4E+5

どうせ . とか + とか - とか e とか E が数字の後ろに来たらエラーにする糞オレオレ関数の出来上がり
160: (アウアウウー Sac5-+LPJ) 2023/06/05(月)18:46 ID:QlKvcf+ua(1) AAS
fortran爺が1e-3を1-3と書いて送ってくるの辛い
161: (ワッチョイ 0128-w4Nq) 2023/06/05(月)22:24 ID:yTJt/rkc0(4/4) AAS
charやwchar_tのうちは文字数くれたら別段間違うことは無いはず……
162: (ワッチョイ 916e-UlWg) 2023/06/06(火)05:24 ID:sRXlIYgz0(1) AAS
0xe5a3ec05p-10
163: (ラクッペペ MMe6-aBKW) 2023/06/07(水)18:16 ID:yJ6NJbScM(1) AAS
regex 使って、全角半角タブはreplace
しつつも、正規表現で、数字だけ残して
ってしたらいいのでは
164: (ワッチョイ 7d02-lxw5) 2023/06/07(水)19:51 ID:Y1IkEaDo0(1) AAS
ファイル名で並び替えるとき数字を文字列じゃなく数として判断して並び替えるの便利だよね。StrCmpLogicalWみたいなの
165: (ワッチョイ eefb-dBHf) 2023/06/07(水)20:17 ID:Wtu+kJ5G0(1) AAS
digitntegerみたいな関数なかったっけ
javaと混同してるかもしれん
166: (ワッチョイ eed6-hc5i) 2023/06/07(水)20:48 ID:DVJV7mYE0(1) AAS
大文字小文字とか小数とか半角全角とか漢数字とかあるから闇が深い
167: (ワッチョイ e54e-sceX) 2023/06/07(水)21:25 ID:nzVrXgF60(1) AAS
アンダーバーの位置関係も結構罠だよね
文字コード的には 大文字<アンダーバー<小文字 だから
168: (オイコラミネオ MMe9-sceX) 2023/06/07(水)23:13 ID:ZHL7BfYmM(1) AAS
言語+コンパイラの仕様が拡張してるのにライブラリは貧弱なまま
自己流に実装してしょうもないバグが紛れ込む

関係ないけどstd::stodはC言語版と微妙に仕様が違うのだろうけどそんなの調べてない
169: (ワッチョイ 469a-D/IE) 2023/06/08(木)00:14 ID:mm4FKY9+0(1) AAS
例えばstodが解釈できる数値表現を正規表現でも解釈したいと思ったらどうしたら
170: (アウアウウー Sac5-tVFH) 2023/06/08(木)11:09 ID:rxjbLVG0a(1) AAS
仕様の不備は運用でカバー
171
(1): (ワッチョイ b901-1DxI) 2023/06/09(金)00:34 ID:Y9bb1A2p0(1/2) AAS
std::sort (std::execution::par, v.begin(), v.end());
上記で並列ソートできるとのことですが何並列なんでしょうか?
もし環境に合わせて良きに計らってくれるのなら
その良き並列数を取得する関数などありますか?
172: はちみつ餃子◆8X2XSCHEME (ワッチョイ e53e-N/Lw) 2023/06/09(金)01:32 ID:vjFKJkM00(1) AAS
>>171
詳細は言語仕様では規定されていない。
リソースが不足していれば並列化されないこともあり得る。
並列化は大抵の場合に OS のサポートが必要だし
どういうサポートがあるかわからんので言語として明瞭な規定を決められない。

並列化される保証はないのにデータ競合が発生しないように実装するのは
プログラマの責任なので若干の理不尽さを感じなくもないが
省1
173
(1): (ワッチョイ 6293-1rII) 2023/06/09(金)07:16 ID:bBOCrSG+0(1) AAS
週末のレイトレーシングで1-17あたりをマルチスレッドにしてみたんだけど、ubuntu上でg++やインテルコンパイラだとスレッド数を増やすと逆におそくなるんです。windows上でvisualstudioでコンパイルすると、望み通りスレッド数を増やすほど速くなりました。何でなんでしょう?
174: (ワッチョイ eef2-2RXP) 2023/06/09(金)08:07 ID:e2G6/2re0(1) AAS
>>173
>週末のレイトレーシングで1-17
全く意味がわからないんだが?
>何でなんでしょう?
お前のコーティングのせいじゃないか?
175: (ワッチョイ 916e-aXLw) 2023/06/09(金)08:18 ID:m5f79nsG0(1/2) AAS
gccはね・・・どうも平行/並列処理には本気じゃないところがある
たとえばstd::execution::parなんか真面目にやらんかこらって言いたくなる
176: (ワッチョイ 916e-aXLw) 2023/06/09(金)08:19 ID:m5f79nsG0(2/2) AAS
無料なので強く出られないけどね
177: (ワッチョイ b901-1DxI) 2023/06/09(金)11:49 ID:Y9bb1A2p0(2/2) AAS
皆さんレスを有り難うござます
うちはstd::execution::parで効果絶大です
$ g++ --version
g++ (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
178: (ワッチョイ b901-mwg1) 2023/06/09(金)22:45 ID:uysUozYZ0(1) AAS
なるほどなあ
179: (ワッチョイ 13ad-2rqm) 2023/06/10(土)02:07 ID:oiDhCbH60(1) AAS
EASTLが久しぶりにバージョンアップしたね
180: (ワッチョイ c901-7YjN) 2023/06/10(土)07:02 ID:kaZ6v5kb0(1) AAS
ほう!いいね
181: (ワッチョイ b16b-q0yD) 2023/06/14(水)07:54 ID:/jeWb7sY0(1/2) AAS
time コマンドで調べたメモリの使用量 (max resident set size) が理論値よりも多くて、原因を特定するためにコード内の各箇所でその時点でのメモリ使用量を出力できたら良いなと思います。
実行環境は Linux なのですが、どのようにするべきでしょうか?
182
(8): (ワッチョイ b16b-q0yD) 2023/06/14(水)08:43 ID:/jeWb7sY0(2/2) AAS
あとメモリに関連した質問で、例えばめちゃデカい std::vector を要素数 1 に resize しても capacity はめちゃデカいままですよね?
STL コンテナ以外にも、大きいメモリが割り当てられてるオブジェクトを使用後に破棄したいというケースがよくあります。
最も簡単なやり方は関数とか局所的なスコープとして切り出すことかと思いますが、他に、オブジェクトに割り当てられているメモリを手動で解放する方法があったら教えてください。
183
(2): (スプッッ Sd33-5Oyn) 2023/06/14(水)08:49 ID:Xd2fVcpxd(1) AAS
/proc/self/stat というファイルを覗きに行くか、
getrusage というシステムコールで取得することになるかな
184
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ c13e-2rqm) 2023/06/14(水)09:19 ID:O3itrano0(1) AAS
>>182
そのために shrink_to_fit がある。
詳細は実装依存なので何もしない関数であっても仕様に反しないけど
常識的には各実行環境で効率的に動くように実装されるので
まずは試してみても損はないと思う。

アロケータを自作してもあまり制御できないんよね。
アロケーションが必要になったらコンテナからアロケータが呼ばれるという
省3
185
(4): (アウアウウー Sadd-g1CP) 2023/06/14(水)10:15 ID:iWYHYN4ra(1/3) AAS
>>182
new で造って delete (または delete []) で解放
186
(2): (ワッチョイ 8bfb-Xx8j) 2023/06/14(水)12:28 ID:XWt8afSz0(1) AAS
更にいうと、deleteはgccでは推奨されないのでptrを使うよりはstaticもしくはvirtualを使いましょうね。
187
(2): (テテンテンテン MMeb-jufV) 2023/06/14(水)12:29 ID:XEzvAdInM(1) AAS
>>182
>>185とほとんど同じだけどunique ptrで管理。
ヒープの確保時間が問題になるならアロケーター使ってヒープを予約する。
188
(1): (ワッチョイ d9f0-EP1b) 2023/06/14(水)13:12 ID:9CAXVpD30(1) AAS
>>182
vector<空にしたいオブジェの要素の型>().swap(空にしたいオブジェ)
189
(2): (アウアウウー Sadd-g1CP) 2023/06/14(水)13:33 ID:iWYHYN4ra(2/3) AAS
>>188
vector<空にしたいオブジェの要素の型> hoge;
が既にあったとしたら
vector<空にしたいオブジェの要素の型>(hoge).swap(hoge);
で良いらしいけど副作用の心配無い?
190
(3): (ワッチョイ 219b-q0yD) 2023/06/14(水)14:03 ID:0kIiqVrM0(1/2) AAS
>>183
ありがとうございます
> getrusage
を試してみようと思います

>>185-187
STL コンテナを使うとしても自作クラスを使うとしても、オブジェクトを unique_ptr で持つことにして要らなくなったら reset() すれば確保していた分のメモリを捨てられるということでしょうか
依存関係が絡み合っていて簡単に小さいスコープに分割できないときは試してみようと思います
191
(2): (アウアウウー Sadd-g1CP) 2023/06/14(水)14:16 ID:iWYHYN4ra(3/3) AAS
reset()は違うと思う
192
(1): (ワッチョイ 01da-EP1b) 2023/06/14(水)14:26 ID:HNZbb8Sq0(1) AAS
>>189
その場合はメモリアクセス領域が変わるのでswapする前に取得済みだったイテレータは再取得する必要あり
193: (ワッチョイ e95f-2rqm) 2023/06/14(水)15:52 ID:K9MvWtl90(1/2) AAS
>186 が何を言ってるのか意味不明でこわい。
194
(1): (ワッチョイ e95f-2rqm) 2023/06/14(水)15:54 ID:K9MvWtl90(2/2) AAS
>>191
「reset() すれば確保していた分のメモリを捨てられる」で間違いないでしょ。
195
(2): (テテンテンテン MMeb-jufV) 2023/06/14(水)18:26 ID:9LyNOs9uM(1) AAS
>>190
resetする必要は無いよ。

コンテナから普通に要素を削除すれば、後はコンテナクラスがよろしくやってくれる。効率は実装次第だけど。
196
(1): (ワッチョイ 219b-q0yD) 2023/06/14(水)18:51 ID:0kIiqVrM0(2/2) AAS
>>195
コンテナクラスがよろしくやってくれるのに任せるのであれば、スマートポインタで持たずに単にコンテナとして持つのと変わらないように思うのですが、違うのでしょうか。
ちゃんと理解していなかったら申し訳ありません。
197
(1): (ワッチョイ d17c-sLM4) 2023/06/14(水)18:58 ID:vjajEcDc0(1) AAS
vectorを信頼するなら単にclear()してshrink_to_fit()すればいい
信用できないならスマポで持っといていらなくなったら手動でブチ消せばいい
それすら信用できないならイチから自分で作れ
お前がどれだけ心配消化による
198
(1): (テテンテンテン MMeb-jufV) 2023/06/14(水)19:18 ID:YeSwNDrrM(1) AAS
>>196
どのコンテナを使うかによる。

vectorとかdequeはまだ確保していない要素用の領域をしばしば予約するから、>>182のような状況を回避するのは面倒臭い。

listとかmapは(これも実装次第だけど)まだ確保していない要素のための領域を予約したりしないから、他のデメリットを許容するなら>>182対策の選択肢になる可能性はある。

いずれにしても、そこまで気にするならまずベンチマークを取って実態を調査すべきだし、そもそも巨大なメモリを頻繁に確保・解放するのは設計に問題があることが多いから、メモリを解放しないで済む方法を検討してみる。
199
(2): (ワッチョイ 219b-q0yD) 2023/06/15(木)03:20 ID:J1cG0ikp0(1/3) AAS
>>198
そもそもvectorのスマートポインタ (あるいはより一般的にサイズが動的なクラスのスマートポインタ) を作り、そのvectorやクラスのサイズを変えたときって確保されてる領域のサイズも変わるんでしたっけ?
手動で変えなきゃいけないと思っていました
(また、vectorのポインタとvectorの先頭要素のポインタは意味が違うのでよりわけが分からなくなりました)
200
(1): (ワッチョイ d17c-sLM4) 2023/06/15(木)06:50 ID:usfnoco+0(1/2) AAS
std::vectorはshrink_to_fit()呼ばない限り勝手にcapacity縮めたりしないはずだけど
201
(1): (ワッチョイ d19c-jufV) 2023/06/15(木)08:48 ID:hMmgKiSo0(1) AAS
>>199
コンテナ内のポインタの予約は避けられないよ。

ただ、ポインタのサイズを気にするようなシビアな状況なら、そもそもc++じゃなくてcで実装することを検討すべき。
202: (ワッチョイ b96e-ofsu) 2023/06/15(木)09:00 ID:K4jCDX8M0(1) AAS
シビアな状況でC++が使えないやつがCならOKなはずはない
203
(1): (アウアウウー Sadd-g1CP) 2023/06/15(木)10:11 ID:dLjlwX4ma(1) AAS
>>199
何が判ってないのかが判ってないパターンだな
まともな解答もらってても何が正しいのか(なぜ正しいのか)
すら判断出来なさそうなレベル
解答者に失礼
204
(1): (ワイーワ2 FF63-pDI4) 2023/06/15(木)10:56 ID:kyFBXozFF(1) AAS
他所スレで同じ様な流れが

>742
質問の仕方が悪いだけwww
欲しい情報を引き出すには一定以上の質問能力が必要

>743
質問の仕方が重要なのはその通りだけど
ここで問題にしてるのは自分が詳しくない領域では質問の仕方が悪かったかどうかも分からないってことでしょうよ
省3
205
(1): (ワッチョイ 219b-q0yD) 2023/06/15(木)12:02 ID:J1cG0ikp0(2/3) AAS
>>201
いや、ポインタのサイズなんて全く気にしてない。
質問は、メモリの解放をコンテナに任せるならわざわざスマポで持つ意味ないよね? ってこと。
で、コンテナに任せるというのは元の質問(>>182)への回答に全くなってないよね? ってこと。
(その理由は>>184,200様の書いてくださってる通り)
つーかお前が何も分かってないのは>>195でreset()しなくて良いとかほざいてる時点でお察し。

>>203-204
省5
206
(1): (テテンテンテン MMeb-jufV) 2023/06/15(木)12:29 ID:QcI//Xn+M(1) AAS
>>205
コンテナのsmart ptrの扱いは調べた?
コンテナの要素とポインタの参照先の違いについて根本的な誤解がありそう。

vectorはまだ構築していないインスタンス用のメモリ領域を予約するけど、smart ptrはそんなことしないよ。
vector<smart ptr>もsmart ptr の予約はするけど、smart ptrの参照先インスタンスの予約はしない。
207
(1): (ワッチョイ 219b-q0yD) 2023/06/15(木)13:15 ID:J1cG0ikp0(3/3) AAS
>>206
だから、結局任意のコンテナ、クラスに対してスコープ内でメモリを解放する方法は?
new で生ポを持って delete するか、スマポを持って reset するかだろ?

> vectorはまだ構築していないインスタンス用のメモリ領域を予約するけど、smart ptrはそんなことしないよ。
そりゃそう。
ゆえに、メモリを間違いなくリリースしたいなら reset すればよいのですねと>>190で述べている。
それで終わりなのにお前と来たら reset は不要だの元のコンテナの挙動に任せるだの、論旨を全く理解してないとんでもレスばっかり。
省3
208: (ワッチョイ 8bfb-Xx8j) 2023/06/15(木)14:56 ID:M9bt3STi0(1) AAS
186でも言ってるがstaticもしくはvirtualでデストラクタ使えよ
それがシンプルで高速で1行も無駄のない設計な
209: (ワッチョイ 01c9-6bUV) 2023/06/15(木)15:01 ID:B8g22vaD0(1) AAS
182の
>最も簡単なやり方は関数とか局所的なスコープとして切り出すことかと思いますが
がコンストラクタで確保してデストラクタで消す話というのはわかってる上で

>他に、オブジェクトに割り当てられているメモリを手動で解放する方法があったら教えてください。
なんじゃないの?

そんなものは無いっていう答えもあるにはあるけどサ
210: (ワッチョイ 13f0-8sUu) 2023/06/15(木)18:41 ID:QIwD56Ju0(1) AAS
最近IPP触り始めたんですが全部飽和演算で面食らってます
Modulo関数は無いんですか?
211
(2): (ワッチョイ fb8c-jufV) 2023/06/15(木)21:00 ID:W1C5TI4i0(1) AAS
>>207
ああ、ごめん。めっちゃデカイインスタンスのvectorじゃなくて、めっちゃデカイvectorね。
それなら実装依存だけど>184か、>192とか参照無効化の制限とかコピーコストとかあるけど>189。189はsmart ptrにしとけば実用上問題ないかね。vectorのイテレーターは保存するものじゃないし。
212
(1): (ワッチョイ c14e-8sUu) 2023/06/15(木)21:28 ID:3cvhbwG+0(1) AAS
実際の所、vectorならclear()→shrink_to_fit()でメモリが開放されないこってありうるの?
213: (ワッチョイ d17c-sLM4) 2023/06/15(木)22:10 ID:usfnoco+0(2/2) AAS
規格上はshrink_to_fit()にメモリ解放する義務はないし、実装定義で何やっても自由(capacityを増やすような真似だけは禁止)
shrink_to_fit()がなんにもしない実装でも一応規格準拠になる
そんな糞みたいな実装が実在するかは知らない
214: (US 0H0b-q0yD) 2023/06/16(金)02:13 ID:PZdB0bgSH(1) AAS
>>211
はい結局一人だけ違う話してた
ハァァ~~~~~(クソデカため息)
215
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ c13e-2rqm) 2023/06/16(金)11:31 ID:QEmhRLek0(1) AAS
>>212
基本的には効率的に実装されるものだと信じて良いと思うが
どういう実装が効率的であるかは実行環境の事情による。

たとえばメモリ管理がページ単位というのは普通のことだし
その場合にページ単位より細かく確保したり解放したりしても非効率になる。

常に何もしないというような実装はあまりないと思うけど
解放するほうが非効率だと考えられる状況では
省2
1-
あと 787 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s