C++相談室 part146

■ このスレッドは過去ログ倉庫に格納されています
2019/11/07(木) 11:35:36.76ID:4wggfTwe
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part145
http://mevius.5ch.net/test/read.cgi/tech/1568362404/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2019/11/29(金) 14:56:51.37ID:GB3X2IZU
コンパイル時に確定してるじゃん
2019/11/29(金) 15:07:19.89ID:M3WjIH4t
むしろもとの書き方だと2度参照解決して3度足し算しているような…
2019/11/29(金) 15:21:18.81ID:YkvT9y9m
textに実行時にアクセスするなら
いずれにしろアドレス計算は必須になる

>>360のようにすれば
最適化がうんこで複数回計算されるのを防ぐ可能性すらある

アクセスしないならおそらく最適化によってアドレス計算コードは生成されない
367デフォルトの名無しさん
垢版 |
2019/11/29(金) 15:50:36.19ID:N/f9f1S7
inline付けるとかえって損か
2019/11/29(金) 17:45:51.93ID:/RbGsSZk
m_data の型が shared_ptr<Data> なことを気にしてるのかな。
shared_ptr の指す先のメンバを参照変数でバインドするのは無作法か、とか。

と言うか、上の話は俺の疑問でもあるんだけど。
2019/11/29(金) 18:15:50.93ID:4DEcYZGM
->
に副作用があるならそりゃ話は別だ
2019/11/29(金) 18:44:49.74ID:xP2G2+ZO
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?
2019/11/29(金) 18:46:27.54ID:xP2G2+ZO
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?
え?なんで俺が笑われてるの?
372デフォルトの名無しさん
垢版 |
2019/11/29(金) 20:21:36.93ID:KHTBF+uC
どうもありがとうございます。
2019/11/30(土) 16:27:23.28ID:4Yq6PogE
constexpr定数とconst定数って結局何が違うの?
2019/11/30(土) 16:40:26.74ID:WebQyLi7
コンパイラに対する単なるヒント
優れたコンパイラでも糞コンパイラでも動きほ同じ
中途半端なコンパイラだと最適化のレベルがもしかしたら違うかも
コンパイル単位にもよる
2019/11/30(土) 17:34:29.84ID:sGzVq6Pz
constexpr定数はコンパイル時に値が確定することが保証されている
2019/11/30(土) 17:35:37.90ID:iKPiHg5H
>>373
constexpr定数はconstexprな文脈を作る。つまり、
constexpr int a = func()
とするとfunc()はコンパイル時に実行される。当然constexpr関数でなければならない

一方、const定数はconstexprな文脈は作らない
const int a = func()
とした時、func()は実行時に処理される。constexpr関数である必要はない
2019/11/30(土) 17:40:18.51ID:4Yq6PogE
ああ、初期化に関数を使うと違いが出るんですね
それにconstexprの場合は初期化が保証されていると
ありがとうございました
2019/12/01(日) 01:46:51.73ID:j3uX5vWG
constexprの強みは、配列のサイズみたいな定数を要求される文脈で使えるってこと。
const変数だとこれができないから、昔はマクロで定数定義するしかなかった。
2019/12/01(日) 01:49:20.00ID:Hj4I5N6m
>>378 C++ではconst変数も一部定数式扱いになってたでしょ。だから>>373みたいな疑問が出る。
2019/12/01(日) 01:54:44.83ID:Nfz3Rlxp
sizeofと何が違うんだ
2019/12/01(日) 08:35:44.43ID:7fh/nHBZ
constは設計ミスが多いな
2019/12/01(日) 08:36:58.95ID:7fh/nHBZ
とても神リッチーが作ったように見えない
383デフォルトの名無しさん
垢版 |
2019/12/01(日) 10:24:23.58ID:gHT6E7kc
STLにはなぜ木が無いのですか。
2019/12/01(日) 10:27:51.87ID:sKSeAmO2
大昔のC言語時代に考えた物だから
関数を使った初期化が出来ない時代の
2019/12/01(日) 10:31:53.72ID:sKSeAmO2
>>383
std::set とか、内部は木じゃね?

汎用的な木?
ポインタのvectorで良くない?
2019/12/01(日) 10:56:13.36ID:SqfEoEmM
Javaでも.NETでも標準ライブラリに木は無いだろ
木はメモリへのシリアライズの仕方を工夫せずに素直にノード毎にnewしてたら殆どあらゆるケースにおいてクッソ非効率なデータ構造なので、
標準ライブラリとして提供する意義が薄い
誤った選択肢を提供することで余計にパフォーマンスを低下させることになるだけだ
2019/12/01(日) 11:03:00.54ID:sKSeAmO2
listもsetもノードごとにnewしてるけど
388デフォルトの名無しさん
垢版 |
2019/12/01(日) 11:15:38.03ID:gHT6E7kc
ダブルアレイを変形させて木を表現できないでしょうか。
子は親のIDを知っていれば良く、親は子の個数を知っていれば良いので、出来そうな気がするのですが。
2019/12/01(日) 11:16:42.54ID:SqfEoEmM
>>387
うん。だから遅いよ。
2019/12/01(日) 11:29:39.61ID:7fh/nHBZ
だから形容詞には比較や数値をつけろってば
それじゃ健康産業で不安を煽る悪徳業者そっくりだろうが
2019/12/01(日) 11:50:38.89ID:p3Z7Nr0h
遅いlistやsetがstlに入っていて使われ続けてるんだから
stlに入れない理由にはならないってことだよあほ
2019/12/01(日) 11:53:33.72ID:rKmqg7A0
いやそんなもん使うやつらがそもそもc++使う必要がねーって話だわ
2019/12/01(日) 11:55:51.88ID:YWi4MX0G
それはお前の個人的な意見?
それとも何かデータでもあるの?
2019/12/01(日) 12:11:13.07ID:p3Z7Nr0h
listやsetが適した用途があるから存在してるんだけどね
使いどころ間違ってるんじゃない?
2019/12/01(日) 12:14:27.64ID:p3Z7Nr0h
同じ用途なら
newやdeleteを使わなかったとしても
結局ノード作成時に空きエリアを探すことになるわけで
2019/12/01(日) 12:17:14.00ID:p3Z7Nr0h
ノード追加専用のスペシャルlistやsetなら速くなるけど
それはもはやlistやsetじゃない
2019/12/01(日) 12:21:44.69ID:vEIKl7N1
プログラムのすべての部分で最速の選択をする必要なんて全く無いのに>>392みたいなことを言うやつはCかFortranで書けばいいんじゃないかな
2019/12/01(日) 12:29:30.42ID:SqfEoEmM
>>394
残念ながら、setはともかくlistが適しているシーンは実際にはほとんどない
途中への少数の要素の挿入削除が頻繁にあって事前にその位置が分かっている状況などどれほどあるというのか
2019/12/01(日) 12:32:06.35ID:p3Z7Nr0h
>>398
使いどころがわからないなら無理して使わなくて良いんだよ
2019/12/01(日) 12:33:53.83ID:SqfEoEmM
>>399
具体例を示そうね
2019/12/01(日) 12:34:14.31ID:p3Z7Nr0h
>>397
10%の高速化なら無視すればいいけど
1000倍とかなら考えるだろ?
vectorとlistとsetの選択を間違えると
そのくらいの差が出る
データ数が多ければ
2019/12/01(日) 12:41:44.01ID:IheeS71f
ソートが早い
403デフォルトの名無しさん
垢版 |
2019/12/01(日) 12:47:37.78ID:gHT6E7kc
イテレータの安定性が。
2019/12/01(日) 12:53:47.75ID:ZEhocPVE
>>397
最速のものを使う必要はないがそもそもアルゴリズムオーダーが間違ってるようなものを
使うってのは頭悪すぎるし、なぜc++使ってんの?バカなの?ファッション?
って気にしかならん。
2019/12/01(日) 12:57:04.85ID:7fh/nHBZ
「そんなもん使う」なんて全面否定しといて
今さらアルゴリズムオーダーとか言い出すのは見苦しい
406デフォルトの名無しさん
垢版 |
2019/12/01(日) 12:58:17.95ID:gHT6E7kc
木とグラフが足りないと思います。
2019/12/01(日) 12:58:25.43ID:n5DjgtsH
イニシャルコストとランニングコストがあるだろ
数か月〜数年間止まらないようなソフトウェアだと初回起動時のデータ読み込み10億件・数分程度は誤差で済む
2019/12/01(日) 13:00:02.95ID:IheeS71f
現存するあらゆるコンテナを実装してくれ
2019/12/01(日) 13:00:34.69ID:YWi4MX0G
>>401
> 1000倍とかなら考えるだろ?

いや? 0.0001ミリ秒が0.1ミリ秒になったところで
大した問題じゃないからね
2019/12/01(日) 13:02:56.20ID:7fh/nHBZ
実害が出るかどうかはケースによるのに
全てお見通しの仏様か何かになったつもりのやつが変なことぬかすんだよな
2019/12/01(日) 13:08:14.41ID:p3Z7Nr0h
>>409
1分と1000分なら大違い
トータル0.1ミリ秒なら何でも良いよ気にするな

データが多い時の話
オーダーが効いてくる

newの時間なんてオーダーの差に比べれば誤差
毎回newだから遅いとかトンチンカン
412デフォルトの名無しさん
垢版 |
2019/12/01(日) 13:09:03.33ID:gHT6E7kc
Boostにイテレータが安定なvectorがありますが、速度はlistに劣る場合があると但し書きがありますよ。
2019/12/01(日) 13:16:11.26ID:p3Z7Nr0h
データ構造は
list, set, リニア(vectorやdeque) で揃ってる
これでオーダー的には大抵は問題ない

微妙な高速化が必要なら専用を自作すれば良いが
組み込みでもなければ必要となることはあまりない

複雑なデータ構造は、
標準のデータ構造を組み合わせて作る
複雑なリンク構造はSLAMの世界だとよく使う
2019/12/01(日) 13:20:19.28ID:ZEhocPVE
いや明らかにsetのオーダーに問題あるだろ。
2019/12/01(日) 13:23:43.76ID:p3Z7Nr0h
えっ?
2019/12/01(日) 13:25:41.03ID:ZEhocPVE
思考停止してないでこれくらいは読んでくれよ。。
https://cpprefjp.github.io/reference/set/set.html
417デフォルトの名無しさん
垢版 |
2019/12/01(日) 13:31:07.65ID:gHT6E7kc
読みました。
2019/12/01(日) 13:31:36.80ID:B2zYeZ5e
メモリの再配置が起こると都合が(あるいは効率が)悪いオブジェクトを比較的頻繁にnew/deleteしつつ、
一覧を保持しておく用途にはlistが適していると思う。
あ、でも、本体をdequeに、ポインタをvectorに入れて管理する方が速いかな? バグりそうで恐いけどw
2019/12/01(日) 13:51:31.01ID:mRJ420VP
>>386
木をそこまで悪くいう人を初めて見かけました、大概のデータ構造は木だと思うのですけど…
2019/12/01(日) 13:56:38.18ID:p3Z7Nr0h
下手くそが巨体な木を作るとひどいって話だろ
下手に作らなきゃ良いだけ
2019/12/01(日) 14:14:45.54ID:YC7h427T
>>414
問題にならない用途、条件のもとで使う分には問題ない。
2019/12/01(日) 14:32:23.94ID:9nkP+L/s
きみはあれか
「ライトバンはセダンにくらべると速度も遅いし馬力もないしとてもあんなもの使えない!」
とかいっちゃうタイプ?
2019/12/01(日) 14:47:10.92ID:HFxN8/oH
>>419
お前は頭が悪いけどな
424デフォルトの名無しさん
垢版 |
2019/12/01(日) 15:33:24.99ID:zRxwjdrk
一般的には、適切な二分木等で実装されたSetは、メモリ効率が悪いことはあっても速度のオーダーがひどいってことは無いだろ
2019/12/01(日) 15:40:09.97ID:CG2Vs9XU
C++11のstd::unordered_setに負けてる。
2019/12/01(日) 15:45:18.33ID:7fh/nHBZ
それはまた別な話だ
427デフォルトの名無しさん
垢版 |
2019/12/01(日) 16:25:31.35ID:BhgcTKiH
二分木がSTLにない理由は簡単。冗長だから。
2019/12/01(日) 16:26:58.04ID:p3Z7Nr0h
setは内部2分木だって言ってるのに
2019/12/01(日) 17:09:51.64ID:7fh/nHBZ
>>422
うまい喩えだなw
430デフォルトの名無しさん
垢版 |
2019/12/01(日) 17:18:14.34ID:BhgcTKiH
>>428
もしかして二分探索と二分木を混同してる?
2019/12/01(日) 17:33:23.47ID:YHuSOkLJ
木の枝を回廊にしたらグラフになります。
グラフはスパコンのベンチマークにされるくらいにメジャーな構造です。
2019/12/01(日) 17:36:46.35ID:YWi4MX0G
>>411
自分で言ってるやん?

データが少ないときなら気にする必要はないので、
データが少ないとき用のアルゴリズムとして
「遅いけど便利」はあったほうが良いだろ
2019/12/01(日) 18:14:48.13ID:XkMP/E25
普通ハッシュ使うよね?とかそういう発想が皆無なのが、
ここは馬鹿しかいないってことを示してるよな。。
2019/12/01(日) 18:19:34.55ID:Enyr5Fgf
>>430
多分混同してるのはお前だけかと
2019/12/01(日) 18:22:27.22ID:Enyr5Fgf
>>433
バカはお前

set は一般的に、二分木として実装される。
https://cpprefjp.github.io/reference/set/set.html
2019/12/01(日) 18:36:45.84ID:n5DjgtsH
ハッシュを使うんじゃねえな
ハッシュをどう作るか?になる

perl5/hv.h at blead ・ Perl/perl5 ・ GitHub
https://github.com/Perl/perl5/blob/blead/hv.h

cpython/dict-common.h at master ・ python/cpython ・ GitHub
https://github.com/python/cpython/blob/master/Objects/dict-common.h
2019/12/01(日) 18:53:22.71ID:ManO1ilk
木やグラフがほしいって言ってる人が、ハッシュマップや内部実装だけが木構造のコレクションなんていらんだろ。。
2019/12/01(日) 19:11:19.73ID:IheeS71f
うんち
2019/12/01(日) 19:20:12.56ID:fP4CRSrQ
「木が欲しい」という要件に対して確認もなく二分木渡すような奴はダメ
ディレクトリ構造表したい奴に二分木渡してどうすんだ
2019/12/01(日) 19:25:06.56ID:WB/GHlzr
二分木って規格で決めてるの?
2019/12/01(日) 19:36:32.68ID:IheeS71f
うんち
2019/12/01(日) 20:13:00.99ID:p3Z7Nr0h
「木が欲しい」なんていう人には
とりあえず何でもいいから木を渡しておけばいいんだよ
2019/12/01(日) 20:31:05.42ID:p3Z7Nr0h
木は用途や使い方次第で適する作り方が異なるので
標準コンテナを組み合わせたカスタムで良いと思うよ
2019/12/01(日) 20:51:16.81ID:YHuSOkLJ
https://ideone.com/u8DxeY
ほら〜。あそこに見えるのがN分木のさんぷるだよ〜。
デバッグしてないから酒の肴にぴったりだよ〜。
445デフォルトの名無しさん
垢版 |
2019/12/01(日) 21:01:15.36ID:BhgcTKiH
C++11以降なら子ノードをweak_ptrの配列で持つとか?
2019/12/01(日) 21:09:55.37ID:YHuSOkLJ
>>444
言い忘れていたが、このスレから取得したN分木のコード(>>444)はMITライセンスです。
改造して変な構造を作ろう!
2019/12/01(日) 21:31:39.82ID:vEIKl7N1
著作権表示なしにMITライセンスにできたっけ
2019/12/01(日) 22:14:07.56ID:9WgCOaQB
サンプルとかライセンスとか頭沸いてんのかこいつ
下痢便を神棚に飾って人に配るような所業
2019/12/01(日) 22:32:33.44ID:YHuSOkLJ
著作権表示は、

2019 Yakitori

が必要なら使って。
2019/12/01(日) 22:32:48.31ID:YHuSOkLJ
>>449
日本語不自由だな
2019/12/01(日) 22:38:20.61ID:vEIKl7N1
2019/12/01(日) 22:41:32.80ID:IheeS71f
うんち漏れそう
2019/12/02(月) 00:33:17.14ID:RIgVO6ZZ
>>448
だな
2019/12/02(月) 02:45:23.23ID:btxUm/V/
オランダのTIOBEの調査でも、C#よりJavaやC/C++が人気で、
他の会社による日本での求人数もJavaやC/C++の方がC#より上だそうだ。
JavaScript、PythonやRubyは、求人数では大したことが無いらしい。
Webページを製作している人がネットでは多いので、JS、Python、Ruby
などが人気であるかのように見えるだけかもしれない。
2019/12/02(月) 03:22:15.51ID:Lvay36w9
>>454
すまん。日本での求人数は、
Java, PHP, Ruby, C#, JS, Python, Objective-C/Swift, C/C++,
HTML, Android, Unity, VB.NET, Scala
だそうだ。ただし、C#から、C/C++ までは横並びでどれが上とも
いえない僅差。そして、Java, Python, Ruby は伸びているが、
PHP, C#, JS, HTML は減っている。
ところが、プログラマ側からの「希望言語」としては、JSがTOP
らしい。アメリカでの今後学びたい言語としては、Java, Pyhtho,
C++ は上位に来るが、C#, Ruby はかなり下の方。
2019/12/02(月) 03:29:10.52ID:Lvay36w9
>>455
個人的見解としては、VS code が 5ch で評価が高かったのは、言語が
TypeScript や JavaScript と HTML で記述されているので、JSで
プログラムすることを希望するプログラマが、JSの求人を増やすために
JS製の成果物を高く評価していたからかもしれない。
また、Javaの伸び率はかなり高い。Rubyの求人は日本では多いようだが、
アメリカでは少ない。C#の人気は、ある時期までは延びたが、今は停滞期
に入ったようだ。しかも今後学びたい言語としては、C よりも低い。
2019/12/02(月) 03:36:47.51ID:Lvay36w9
TIOBEの調査では、Java と Cの人気が同列で高く、Python がそれに続く。
また、CとC++を合計すると、Javaよりもだいぶ高い人気となる。

Java 16.2% (-0.50)
C 16.0% (+1.64)
Python 9.84% (+2.16)
C++ 5.60% (-2.68)
C# 4.31% (+0.36)
VB.NET 4.22% (-2.26)
JS 1.93% (-0.73)
PHP 1.72% (-0.66)
SQL 1.69% (-.15)
Swift 1.65% (+0.20)
Ruby 1.26% (+0.17)
Objective-C 1.20% (-0.28)
・・・
D 0.927% (-0.64)
Go 0.853% (-0.64)
2019/12/02(月) 03:57:59.67ID:qRRc8YVo
CとC++とC#の区別ができる営業いないんだよな
2019/12/02(月) 04:06:59.74ID:3lD7gpLY
営業って年取った技術者がやるもんだろ
2019/12/02(月) 06:49:53.19ID:MoZo3p1s
今はもう戦力外技術者なんて即解雇だよ
そもそも大手だと営業と技術者は別会社
2019/12/02(月) 07:41:42.15ID:tW9RdYoY
なんで大手条件が勝手に加わるのか
2019/12/02(月) 08:23:03.95ID:mQVkXZA1
零細中小なんて誰も興味ない
2019/12/02(月) 08:42:45.44ID:GldGaTIn
比較するもんじゃないだろ
C++は好きだが、在庫管理システムをC++で書けと言われたら全力で拒否してC#を推すぞ俺は
2019/12/02(月) 11:06:47.45ID:5u9Q6RC4
ほんとそれだな
きみらはいつになったらライトバンとセダンの使い分けができるようになるのか・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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