19/11/26 13:05:09.36 auNO4ARl.net
関数を使おうってときに
関数内変数をデータメンバに改造するアホが
うちの若いのにいたら焼きだ
201:デフォルトの名無しさん
19/11/26 13:11:02 njyF587z.net
パフォーマンスに問題があるならやるしかない
202:デフォルトの名無しさん
19/11/26 13:14:44 njyF587z.net
バッファをあらかじめ確保しておくなんて
ごく当たり前のことだと思ってたけど
そうじゃないのか?
updateなんていう、
クラスの内部に直結してそうな関数ならなおさら
203:デフォルトの名無しさん
19/11/26 13:16:07 XO/gVUyI.net
とか抜かすやつに限って計測もせずに片っ端から最適化と称した難読化をしやがる
204:デフォルトの名無しさん
19/11/26 13:18:32 njyF587z.net
パフォーマンスの問題であれば
パフォーマンスに問題があるなら
205:デフォルトの名無しさん
19/11/26 13:20:23 XO/gVUyI.net
>>200
パフォーマンスの問題であるなら、まずは計測する
そして最適化厨が必死に難読化を施しているその箇所は、殆どの場合パフォーマンスに全く影響しない
206:デフォルトの名無しさん
19/11/26 13:23:10 njyF587z.net
パフォーマンスを考えなくていいプログラムなら
そもそもC++を選ぶのが間違い
207:デフォルトの名無しさん
19/11/26 13:24:09 njyF587z.net
少なくとも質問者は気にしている
208:デフォルトの名無しさん
19/11/26 13:25:28 njyF587z.net
パフォーマンスなのかフラグメントなのか使用リソースなのか
何を気にしてるのかはわからないけど
209:デフォルトの名無しさん
19/11/26 13:35:02 XO/gVUyI.net
再入やマルチスレッドで死ぬ恐れもあるから、このレベルの初心者にバッファの事前確保が当然だなどという阿呆な考えを植え付けることはテロ行為に等しい
210:デフォルトの名無しさん
19/11/26 14:14:31 jE+AmQNT.net
内部でnewを使ってるクラスの変数かも知れない
211:デフォルトの名無しさん
19/11/26 15:17:34 GwsQnBsH.net
>>191はstaticがついてなければyesで終わる話
それに勝手な前提つけたしていらん押し付けをするからお前らは駄目なんだぞ
212:デフォルトの名無しさん
19/11/26 15:28:32 FGS0cB19.net
>>207
会話するのが嫌いならわざわざ書き込まなくて良いんだよ
213:デフォルトの名無しさん
19/11/26 15:51:04 jE+AmQNT.net
ゴミみたいな会話するな
214:デフォルトの名無しさん
19/11/26
215:16:11:06 ID:FF/Zqwz/.net
216:デフォルトの名無しさん
19/11/26 16:15:11.65 fUnM+X7O.net
>>202
そのプログラム全体が速度が要求される訳でもなかろう。必要なところだけ必要なぶんだけ高速化しろよ。
速度が要求されない部分も別にわざわざ別の言語で作るメリットがなければC++のままで構わないわけだし。
217:デフォルトの名無しさん
19/11/26 16:18:03.80 fUnM+X7O.net
>>208
質問者にとっては混乱させられるだけの余分な情報だし、知っている人からすれば当たり前で価値のない情報だし、実のない議論したいだけの無意味な付け足しは要らんよ。
218:デフォルトの名無しさん
19/11/26 16:46:50 FF/Zqwz/.net
俺が言いたいのは一つだ。
C言語は超高等言語なので、その前にC++使うのだ!
219:デフォルトの名無しさん
19/11/26 17:39:44.76 M+fYb0eE.net
>>211
>>203
220:デフォルトの名無しさん
19/11/26 17:59:37.88 yLsU10sd.net
いやそもそも>>195の前半で解答は終わってるだろ
>>195の後半は余計
221:デフォルトの名無しさん
19/11/26 18:06:10.26 M+fYb0eE.net
>>210
普通の型なら普通にC++で書いた方が良い
定数ならコンパイラが工夫する
普通じゃない型、例えば多倍長でも
1ビットずつシフトして速くなることは無いと思って良い
222:デフォルトの名無しさん
19/11/26 18:06:14.04 Wuw5jSRm.net
>>210
>今の技術使ったら爆速に
ならねーよw
223:デフォルトの名無しさん
19/11/26 18:52:42.91 FF/Zqwz/.net
>>217
ならないかー。
コンパイルタイム時に置き換えるから、1サイクルに落ちるものだと・・・。
224:デフォルトの名無しさん
19/11/26 19:27:14.09 Kb2Sko2q.net
爆速にならなくても1サイクルだろうよ
225:デフォルトの名無しさん
19/11/26 19:41:24.45 78UVTJ0X.net
1サイクルじゃシフトしか出来ない
226:デフォルトの名無しさん
19/11/26 19:48:34.46 2UYQ/Noe.net
なんか根本的にconstexprを勘違いしてる初心者がよくそういうこと言うけど
定数同士の計算の省略なんか大昔からある最適化だぞ
C++03以前を偉そうにデイスってる奴(>>210は別として)最近多いけど、そういうのに限ってこういう基礎が全くわかってない
227:デフォルトの名無しさん
19/11/26 19:57:12.90 dLX9Z9/K.net
constexprの利点はtemplateとif constexprの組み合わせがおすすめだと思うの。
228:
19/11/26 20:04:28.16 eitz3RWA.net
>>210
スレリンク(tech板:51番)
多桁長演算の乗算・除算もやってみたかったので書いたものです
229:デフォルトの名無しさん
19/11/26 20:23:56.31 78UVTJ0X.net
>>218を読まずに>>220を書いた
コンパイル時に解決するなら0サイクルだ
230:デフォルトの名無しさん
19/11/26 20:29:02.34 78UVTJ0X.net
よく分からない多倍長ライブラリを使うのであれば
当然コンパイル時に解決出来るとは限らない
231:デフォルトの名無しさん
19/11/26 20:32:56.90 sE/nea3J.net
>>223
多倍長の乗算は筆算の要領で出来るの算数程度の数学で足りるが、
多倍長の除算は、CPUが持っている除算命令を使って行おうとすると
数学的な考える力が必要になる。アルゴリズムは既に有ることはあるはずだが、
丁寧に解説されているわけではないので自分の力で証明できるくらいの
人で無いと難しいと思う。
232:デフォルトの名無しさん
19/11/26 20:35:31.27 78UVTJ0X.net
>>226
素人が適当な事を言わない方が良いかと
233:デフォルトの名無しさん
19/11/26 20:39:17.37 78UVTJ0X.net
多倍長の乗算は、
非常に桁数が少ないときのみ筆算方式
もうちょっと大きいとカラツバ
もっと大きいとフーリエ変換
除算はニュートン法が一般的かと
もちろん、
特殊な形だと特殊な方法があったりする
234:
19/11/26 20:47:20.16 eitz3RWA.net
>>226
それは乗算と除算が逆なのでは?
除算は筆算流しか手はありません、乗算はいろいろなやりかた(カラツバ・FFT)があるようです
235:
19/11/26 20:48:04.78 eitz3RWA.net
>>228
>除算はニュートン法が一般的かと
ニュートン法で剰余を求めることはできますか?
236:デフォルトの名無しさん
19/11/26 20:49:49.76 78UVTJ0X.net
>>230
そりゃ当然出来ますよ
桁数が大きいときは、
除算は乗算の3倍程度の時間で出来ます
237:デフォルトの名無しさん
19/11/26 20:51:56.72 78UVTJ0X.net
除算を筆算方式なんかでやってたら日がくれる
238:デフォルトの名無しさん
19/11/26 20:54:28.73 78UVTJ0X.net
分子の桁数が大きくて分母の桁数が非常に小さい場合のみ筆算方式が有効
この場合も、
非常に遅い割り算命令なんかは使いませんが
239:デフォルトの名無しさん
19/11/26 20:56:28.50 sE/nea3J.net
>>229
>除算は筆算流しか手はありません
そうではありません。除算をCPUにある除算命令を使った筆算で行うには、x/y の
xのBIT数を増やすのは容易ですが、yの方のBIT数を増やすのは非常に難しいのです。
不可能では有りませんが、非常に数学的な注意が必要となります。
私は数学マニアみたいなものなので、自分なりのアルゴリズムを作ったことが
ありますが、個人的には、それをするためにはテーラー展開の剰余項や解析学的な
知識が必要だと思っています。
考えもしませんでしたが、他にも除算は、ニュートン方を使う流儀もあるそうです。
240:デフォルトの名無しさん
19/11/26 20:58:37.06 sE/nea3J.net
>>233
いえ、そうでもありません。テーラー展開の剰余項を注意深く扱うと、
CPUがもつdiv命令を使った筆算の場合でも、x/y の y の方のBIT数を
増やすアルゴリズムがありえます。何度も書いてますが、それは数学的に
とても慎重さを必要とします。
241:デフォルトの名無しさん
19/11/26 21:00:22.71 sE/nea3J.net
>>235
ただし、ニュートン法を使う方法については考えたことがなかったので、
どっちが効率が良いかは分かりません。
242:デフォルトの名無しさん
19/11/26 21:03:02.62 78UVTJ0X.net
>>235
普通のPCのDIV命令は30サイクル近くもかかる
乗算は1~4サイクル
スーパーコンピューターでも除算は非常に遅い
>>233の条件では
除算命令などは使わない方が速い
除算は乗算に置き換えるのが普通
243:デフォルトの名無しさん
19/11/26 21:04:44.09 78UVTJ0X.net
分母、分子それぞれの桁数によって
最適な方法は変わる
だからそういった条件をセットで語らないと意味がない
244:デフォルトの名無しさん
19/11/26 21:06:41.35 78UVTJ0X.net
巨大な桁数同士だとニュートン法が速い
乗算の3倍ほどの時間で出来る
割り算を組み合わせたらそんな時間では計算出来ない
245:
19/11/26 21:15:26.74 eitz3RWA.net
>>231
ニュートン法(にゅーとんらぷそん)って、曲線で与えられる関数の根の一つを求める方法でしょ?
いわゆる実数の根を求める方法であって、整数の剰余を求めることはニュートン法では無理なのでは?
何がどうなって「当然」なんですか?
246:デフォルトの名無しさん
19/11/26 21:19:25.20 78UVTJ0X.net
除算が出来るんだから剰余も当然求められる
247:
19/11/26 21:22:34.40 eitz3RWA.net
>>241
で、その剰余はどうやって求めるのですか?
まさか、求めた商に除数をかけて被除数から引くのですか?それって遅くないですか?
248:デフォルトの名無しさん
19/11/26 21:23:39.77 78UVTJ0X.net
遅くないです
249:
19/11/26 21:25:15.97 eitz3RWA.net
>>243
本当ですか?わざわざ、あらためて掛け算をするんですよ?私には馬鹿みたいな方法にみえますが?
250:デフォルトの名無しさん
19/11/26 21:26:45.06 78UVTJ0X.net
馬鹿みたいな方法にみえるのはあなたが馬鹿だからです
251:デフォルトの名無しさん
19/11/26 21:29:07.44 sE/nea3J.net
>>242
ニュートン法なので、
z = b / a の z を求めたい場合、直線 y = a * x - b と x 軸(y=0) との交点の
x を求めることによって行う。その際、x0, x1, ・・・, xn のように x を
漸化的に交点に近づけて
252:いく。数学的直感だと、その途中で剰余も求められ るように出来そうな気がする。
253:デフォルトの名無しさん
19/11/26 21:43:45.68 sE/nea3J.net
>>246
色々なやり方はあると思うけど、2^m <= a < 2^(m+1) の場合、
x_{k+1} = x_k - (y_k << m);
y_{k+1} = a * x_{k+1} - b;
の漸化式でいけるかも知れない。
間違っていたらゴメンなさい。
254:デフォルトの名無しさん
19/11/26 21:44:43.61 78UVTJ0X.net
>>246
その方法で乗算の3倍の時間で除算が出来ますか?
無理ですよね?
255:デフォルトの名無しさん
19/11/26 21:49:53.94 sE/nea3J.net
>>248
漸化式が三回くらい行ったら正しい答えに到達するのであれば、
乗算の三倍程度の時間で済むと思う。
何回で到達するかは、まだ考えて無いのでわからない。
256:デフォルトの名無しさん
19/11/26 21:53:39.27 sE/nea3J.net
>>247
ここで、0<= y_k < x_k が満たされれば、x_k が商、y_k が余りだと思う。
初期条件は、
x_0 = 1;
y_0 = a * x_0 - b;
とすればよいはず。
途中、y_k が負の値になることが有るが、問題ない。
257:デフォルトの名無しさん
19/11/26 21:55:42.20 78UVTJ0X.net
前提は分母も分子も巨大な桁数で良いんだよね?
258:デフォルトの名無しさん
19/11/26 21:56:38.32 78UVTJ0X.net
分母の桁数があまり大きくないならテーラー展開も有効だよ
259:デフォルトの名無しさん
19/11/26 21:57:23.51 sE/nea3J.net
>>251
一般的な場合を取り扱うのであれば、その条件が、もっともらしいと思います。
260:デフォルトの名無しさん
19/11/26 21:57:37.73 78UVTJ0X.net
いずれにしろ、
除算命令を多用することは無い
261:デフォルトの名無しさん
19/11/26 21:58:41.68 sE/nea3J.net
ニュートン法を使うのは初めて聞きました。
とても勉強になります。
262:デフォルトの名無しさん
19/11/26 21:59:47.69 78UVTJ0X.net
>>253
それで漸化式3回なんてことはあり得ないかと
263:デフォルトの名無しさん
19/11/26 22:01:24.02 sE/nea3J.net
○<< m とせずに ○<< (m+1) としておけば、y_k は負の数にならないかも
知れない。ただ、数学的直感的に、収束速度は、前者の方が速い気がする。
264:デフォルトの名無しさん
19/11/26 22:03:05.27 78UVTJ0X.net
>>240
数年前にも「にゅーとんらぷそん」とか書いてた糞コテがいたんですが
もしかして本人?
文のレベルも頭の悪さもそれっぽい
265:デフォルトの名無しさん
19/11/26 22:07:18.12 78UVTJ0X.net
八木アンテナを八木宇田アンテナと書かないのと同程度に
ニュートンラプソン法とは書かないと思っているので
印象に残ってます
266:
19/11/26 22:08:38.03 eitz3RWA.net
>>258
raphson の ph を摩擦音で読むか、有気破裂音で読むかは、選択可能かと思っていましたが
267:デフォルトの名無しさん
19/11/26 22:10:11.81 sE/nea3J.net
>>247
まず、シフトの向きが右で、正しくは、○>>○ でした。
268:デフォルトの名無しさん
19/11/26 22:16:30.64 78UVTJ0X.net
>>260
何を指摘されてるのかわかってないwww
269:デフォルトの名無しさん
19/11/26 22:19:47.56 sE/nea3J.net
>>256
では、BIT SHIFT ではなく、浮動小数点演算にして、以下の様にすれば速くなるかもしれません。
(i) 初期条件
η = 1/a; // 多倍長の浮動小数点
x_0 = 1;
y_0 = a * x_0 - b;
(ii) 漸化式
x_{k+1} = x_k - (int_N)(y_k * η);
y_{k+1} = a * x_{k+1} - b;
但し、int_N は、多倍長の浮動小数点を多倍長整数に直す cast。
270:デフォルトの名無しさん
19/11/26 22:34:50.59 FauhtWma.net
#include <iostream>
using namespace std;
int main() {
string str = "abc";
cout << &str << endl;
cout << str << endl;
cout << str.c_str() << endl;
return 0;
}
VisualStudio2019のdebugとreleaseとで&strのメモリダンプ内容が異なるのはなぜでしょうか?
debug : 78 f7 b6 00 61 62 63 00
release : 61 62 63 00
271:デフォルトの名無しさん
19/11/26 22:34:54.21 78UVTJ0X.net
1/a が求まれば
あとは乗算2回(と軽い演算)で剰余が求まるでしょ
漸化式にするまでもなく
272:デフォルトの名無しさん
19/11/26 22:36:37.97 78UVTJ0X.net
>>264
デバッグ情報とか破壊検出用データとかじゃ?
273:デフォルトの名無しさん
19/11/26 22:37:41.67 sE/nea3J.net
>>265
細部までは分かりませんが、直感でなんとなく分かります。
aが32BITの場合なら、一度にほぼ、32BIT分計算が終わる気がします。
274:デフォルトの名無しさん
19/11/26 22:42:23.06 FauhtWma.net
>>266
ありがとうございます。
ということはdebug版の呼び出し元(exe)とrelease版の呼び出し先(dll)
間ではstring型を関数の引数にするとバグりますね。
275:デフォルトの名無しさん
19/11/26 22:44:29.12 78UVTJ0X.net
>>267
>>251の前提はどこに?
276:デフォルトの名無しさん
19/11/26 22:45:06.01 sE/nea3J.net
>>268
そうなりますね。
malloc() や new なども、Debug 版と Release 版ではライブラリに互換性が
有りません。Debug 版では、まさに、破壊検出用の埋め草のような物が入っていたり、
new を行った行番号情報が入っていたりします。
277:デフォルトの名無しさん
19/11/26 22:46:50.29 FauhtWma.net
>>270
多謝!!!
しりませんでした。
278:デフォルトの名無しさん
19/11/26 22:49:29.81 sE/nea3J.net
>>269
私は特に仮定はしていませんが、四倍浮動小数点型などに興味があり、
それを整数演算に置き換えて実装してみようかと思っていたりするので、
割る数も割られる数も同じくらいのBIT数の整数の場合に興味があります。
前に調べたところ、倍精度浮動小数点演算を用いて、四倍精度浮動小数点
の乗算、除算まで実装する方法があるようですね。ただし、その場合、
Intelの内部拡張倍精度(80BIT)方式をONにしていると駄目なんだそうですが。
279:デフォルトの名無しさん
19/11/26 22:57:18.80 78UVTJ0X.net
>>272
4倍弱精度なら
Haswell以降で使えるFMA命令がとても約に立ちます
280:デフォルトの名無しさん
19/11/26 22:58:49.33 YRq1zw3m.net
>>264
こっちで試した限りだと、debugとreleaseでコンソール表示の長さは変わらんかったぞ
x86とx64なら差が出たが
281:デフォルトの名無しさん
19/11/26 22:59:27.13 sE/nea3J.net
>>265
aがN BIT の場合、例えば、1/a を、64BIT 程度で求めた場合は、
(N / 64) (回) 程度の乗算が必要になりそうです。
1/a を高速に N BIT まで求めるアルゴリズムがありますでしょうか?
282:デフォルトの名無しさん
19/11/26 22:59:32.53 78UVTJ0X.net
それ以前の普通の乗算でも出来るけど
AVXでSIMD化出来るのでたくさん計算するならぜひ
283:デフォルトの名無しさん
19/11/26 23:01:27.32 sE/nea3J.net
>>273
興味深いです。教えていただければ幸いです。
284:デフォルトの名無しさん
19/11/26 23:02:58.56 YRq1zw3m.net
>>274
メモリダンプという言葉をみおとしていた
スレ汚しすまぬ
285:デフォルトの名無しさん
19/11/26 23:05:02.93 78UVTJ0X.net
>>275
私が何度か除算は乗算の3倍の時間と書いたのは
例えば100万桁同士の除算は100万桁同士の乗算の3倍な時間という意味
乗算命令の回数ではなくて
aが100万桁で1/aを100万桁精度で求めるのは
100万桁同士の乗算の2倍くらいの時間で出来る
286:デフォルトの名無しさん
19/11/26 23:10:41.35 sE/nea3J.net
例えば、割り算部分をテーラー展開ですか。
287:デフォルトの名無しさん
19/11/26 23:17:37.02 78UVTJ0X.net
>>277
{a_hi, a_lo} と {b_hi, b_lo} の乗算で
a_hi * b_hi を求めてから、
本当の a_hi * b_hi との誤差を求めるところ
c_hi = a_hi * b_hi とやってから
a_hi * b_hi - c_hi
をFMAでやれば誤差が簡単に求まる
288:デフォルトの名無しさん
19/11/26 23:19:37.46 78UVTJ0X.net
fusedな3個の足し算命令とかもあると
加減算も簡単になるんだけど
そんな命令は(他のCPU含めて)見たことがない
289:デフォルトの名無しさん
19/11/26 23:24:07.48 sE/nea3J.net
a=1+q の時:
y/a=y/(1+q)
=y*{1 - q + q^2 - q^3 + ... }
=y*(1-q*(1-q*(1-q...))}
290:デフォルトの名無しさん
19/11/26 23:30:51.74 sE/nea3J.net
>>283
この式は、|q|<1の場合にだけ正しいので、
aをa=u*2^n (u = 1.0 + q)の形式に直してから
1/a = 1/(u*2^n)=1/(1+q)*2^(-n)
= (1-q*(1-q*(1-q...)))*2^(-n)
とするのですかね。
なるほど、qの精度を考えれば、乗算の回数は2個くらいまで
で済みそうですね。
291:デフォルトの名無しさん
19/11/26 23:36:41.80 sE/nea3J.net
>>284
すみません、これだと二回では精度が足りなさそうですね。
292:デフォルトの名無しさん
19/11/26 23:37:21.85 78UVTJ0X.net
多倍長の1/aの話なら
テーラー展開は遅すぎて使いませんよ
4倍弱精度の話であれば
除算命令やテーラー展開は使いますが
どれの話をしてるのかわかるようにかいてくれませんか?
>>238 の通りなので
293:デフォルトの名無しさん
19/11/26 23:49:53.60 sE/nea3J.net
>>286
多倍長の 1/a はどうやって求めたら効率が良いのでしょうか?
294:デフォルトの名無しさん
19/11/26 23:53:50.60 78UVTJ0X.net
>>228
295:デフォルトの名無しさん
19/11/27 00:00:48.09 T7KqQ5kC.net
>>288
もしかすると、
y = 1/(a*x) - 1
と
y = 0
の交点をニュートン法で求めるのでしょうか。
296:デフォルトの名無しさん
19/11/27 00:02:25.36 T7KqQ5kC.net
>>289
すみません、違いますね。
297:デフォルトの名無しさん
19/11/27 00:27:57.72 tKRTExPe.net
初歩的な質問ですみません
2つのdouble型実数xとyを引数とし、x/yとy/xの大きい方を返却する関数を作成せよ。xあるいはyのときは0を返却するとする。という問題でコード書いてみたんですがうまくいきません どこが間違っているのでしょうか
#include<stdio.h>
double func(double,double); /*プロトタイプ宣言*/
int main(void)
{
double a,b;
printf("実数をスペースで区切って入力してください\n");
scanf("%d %d",&a,&b);
printf("%d",func(a,b)); /*呼び出し*/
return 0;
}
double func(double x,double y)
{
if(x/y > y/x) return x/y;
if(y/x > x/y) return y/x;
if(x==0) return 0;
if(y==0) return 0;
}
298:デフォルトの名無しさん
19/11/27 00:33:48.17 ynQDuheL.net
%dのところがおかしい
それは整数用
299:デフォルトの名無しさん
19/11/27 00:42:47.79 tKRTExPe.net
ありがとうございます 1時間くらい悩んでたのが馬鹿みたいだ
300:デフォルトの名無しさん
19/11/27 00:53:21 ynQDuheL.net
入力に0を含めてテストするように
301:デフォルトの名無しさん
19/11/27 01:11:14 tKRTExPe.net
ifの順番変えたら完成しました
302:デフォルトの名無しさん
19/11/27 02:13:53.15 XGkmLsxS.net
QZは馬鹿
303:デフォルトの名無しさん
19/11/27 02:41:24 Q9FMbuzn.net
xとyが等しいケースは書いたんじゃろうか
304:デフォルトの名無しさん
19/11/27 11:43:48.59 g3LmaZYt.net
世にある仕事の数でいうと
java:C#:C++が5:3:1くらいだな。
305:デフォルトの名無しさん
19/11/27 12:16:41.56 zdI/1sLa.net
このスレ過疎かと思ったら話題でた途端に加速するな
306:デフォルトの名無しさん
19/11/27 13:47:03 KtqS+hCI.net
const は要らない子
307:デフォルトの名無しさん
19/11/27 14:58:41.90 vSkP4LPU.net
本当はね・・・constの逆が欲しいのさ
デフォが書き込み禁止で許可を明示だったらと
キャプチャのmutableみたいな
308:デフォルトの名無しさん
19/11/27 15:05:41.36 Yu9S3/3Y.net
めんどくさいだけ
309:デフォルトの名無しさん
19/11/27 15:08:54.83 lAIqGT0K.net
Pointという点を表すクラスがあって、2点間の距離を取得する関数を追加したいのですが、
double Point::GetDistance(const Point &p) const
にすべきか、ただのCの関数で
double GetDistance(const Point &p1, const Point &p2)
にしたほうがいいのか迷っています。
設計的にいいのはどっちなんでしょうか?
310:デフォルトの名無しさん
19/11/27 15:13:19.55 zdI/1sLa.net
>>303
下
Pointに必要以上の機能を作らない
311:デフォルトの名無しさん
19/11/27 15:32:27 FMRbYBnJ.net
下に1票。同じ理由
312:デフォルトの名無しさん
19/11/27 15:33:34 vYtjQlD0.net
下だな
なんでもかんでもインスタンスに生やすのは厨臭くてダサいし、対称な操作は対象に見えるべき
313:デフォルトの名無しさん
19/11/27 15:34:48 lAIqGT0K.net
>>304
ありがとうございます。
ですよね。前者の考えでいくと、いくらでもメンバ関数が増えそうな気がしていました。
314:デフォルトの名無しさん
19/11/27 15:43:43.07 PahKH909.net
下の方が、スカラー値等の既存型や配列向けの特殊化をし易いメリットもあるかもねー
315:デフォルトの名無しさん
19/11/27 15:55:14.01 xImtWZAs.net
ベクトルの引き算を定義してやるのはありでは
316:デフォルトの名無しさん
19/11/27 16:11:06 KtqS+hCI.net
下を造っておいて
operator - で下のを利用 >>309 と同じ
どちらも inline
317:デフォルトの名無しさん
19/11/27 16:12:16 KtqS+hCI.net
ああ同じではないわ
ベクトルの引き算はスカラーじゃなくてベクトル
ベクトルの絶対値を定義する
318:デフォルトの名無しさん
19/11/27 16:29:07.34 MN5dlGGA.net
abs(a-b)
319:デフォルトの名無しさん
19/11/27 18:11:30.16 p98u22dC.net
ベクトルの加減算や符号は紛れが無いのでオペレータで実装
乗算は内積、外積と要素ごとの積の3種類あるので
関数にする
3次元ベクトルも作る可能性があるなら
2次元ベクトルだとわかる名前にしておく
可能性が無いならそのままで
絶対値やノルム、象限などをグローバルにするかメンバ関数にするかは一長一短
設計ポリシー次第
320:
19/11/27 19:16:22.98 N9ggbkQ1.net
>>303
私も下
>double GetDistance(const Point &p1, const Point &p2)
を friend 関数にします、大事にするのは対照であること、です
321:デフォルトの名無しさん
19/11/27 19:21:07.28 fyVQDs9d.net
>>187
メモリフラグメントを起こさないようにわざわざメモリプール切ってるのに
new/delete繰り返すオマエみたいなアホがいるからまともな製品ができねぇんだろww
322:デフォルトの名無しさん
19/11/27 19:29:28.78 vSkP4LPU.net
>>315
ほーう?
メモリプールでフラグメントが防げるのかww
323:デフォルトの名無しさん
19/11/27 19:31:20.95 nSz8Pwyp.net
>>314
オペレータだとメンバ関数な実装多いよね
なんでだろう
324:デフォルトの名無しさん
19/11/27 19:40:34.02 nSz8Pwyp.net
RTOSを使うような小規模環境だと
ヒープをしなかったりアロケートのみにしたりする
そんな環境でもC++は便利なので使えるなら使いたい
325:デフォルトの名無しさん
19/11/27 19:40:48.50 nSz8Pwyp.net
ヒープを搭載しなかったり
326:デフォルトの名無しさん
19/11/27 19:48:12.34 nSz8Pwyp.net
OSレスでもC++が使えるなら使う
実際それで製品出した
327:デフォルトの名無しさん
19/11/27 19:52:22.88 q8B3tEUN.net
対称が大事なのって、交換法則が成り立つ計算だから?
328:デフォルトの名無しさん
19/11/27 19:54:03.88 nSz8Pwyp.net
引き算の立場は?
329:デフォルトの名無しさん
19/11/27 19:57:18.53 nSz8Pwyp.net
主役がはっきりしてる場合はメンバ
同等な重要度の時は非メンバ
私の場合はだいたいこんな感じ
330:デフォルトの名無しさん
19/11/27 19:58:30.31 nSz8Pwyp.net
対称かどうかはあまり関係ない
331:デフォルトの名無しさん
19/11/27 20:25:32.56 vYtjQlD0.net
対称性が特に問題になるのはオペランドの型が異なるケースだな
対称な演算a.op(b)をaのクラスに実装したらbのクラスにも同じものをコピペするのか?
C#の演算子オーバーロードがstaticなのはそのへんが理由だとか
Pythonなどのスクリプト言語では基本的にインスタンスメソッドとして演算子を実装するけど、
それは動的型故に事前に実装を解決できないからだね
332:デフォルトの名無しさん
19/11/27 20:29:53.87 EGeQZX97.net
>>317
かつて非メンバ関数のオペレータを名前空間の外から呼び出そうとするととても残念な気持ちになるからじゃね
333:デフォルトの名無しさん
19/11/27 20:44:42.44 0U9h+SK3.net
オペレータオーバーロードを使うとカッコイイ気分にひたれるからだろ
それ以外の理由なんてあるのか?
334:デフォルトの名無しさん
19/11/27 20:45:44.57 E2H9effp.net
private変数の書き換えを伴うものだけメンバだな
Pointが座標値しか持ってないようなのならコンストラクタ以外は持たせない
335:デフォルトの名無しさん
19/11/28 01:38:08 PoPpbfsh.net
代入は普通メンバだろ
=
+=
-=
*=
/=
[ ]も
336:デフォルトの名無しさん
19/11/28 01:44:12 PoPpbfsh.net
当然符号も
337:はちみつ餃子 ◆8X2XSCHEME
19/11/28 02:14:28 +45JwpRI.net
>>303
これは後者が良い場合が多い。
型変換の対称性が絡むんだよ。
たとえば std::tuple<double, double> から Point への変換コンストラクタが用意されているようなとき、
メンバ関数として実装されていると左辺ではこの型変換が考慮されず、右辺では考慮されるということになる。
338:デフォルトの名無しさん
19/11/28 02:50:39.48 4GnG2KNj.net
>>329
代入系と添字はそもそもメンバとしてしか書けない
339:デフォルトの名無しさん
19/11/28 06:43:27.57 PoPpbfsh.net
>>332
>>328に言って
>>331
対称性は関係ないって
Point * double
だって型変換された方が都合が良いなら非メンバだろうに
340:デフォルトの名無しさん
19/11/28 08:02:30.92 A3g54Di2.net
>>316
ほーう?
そんなことすら知らないのかww
341:デフォルトの名無しさん
19/11/28 08:09:05.07 YpOyjZW5.net
>>334
ハッタリしかできることねえようだな
まあ、そうだろう
342:デフォルトの名無しさん
19/11/28 08:20:32.24 PoPpbfsh.net
フラグメントが問題になるならアロケート専用で解放出来ないようにするとかそもそもアロケート出来ないようにするとか
固定サイズを頻繁になら独立させておけばフラグメントしない
343:デフォルトの名無しさん
19/11/28 08:21:42.93 PoPpbfsh.net
ヒープはヒープで1個の研究分野になるくらい
いろんな技術、方法がある
344:はちみつ餃子
19/11/28 17:46:42.56 +45JwpRI.net
>>333
???
理解できないのでもうちょっとくやしく
345:デフォルトの名無しさん
19/11/28 18:11:40.54 PoPpbfsh.net
>>338
今回たまたま対称であったというだけで
対称性が理由じゃないってこと
ベクトル※ベクトル
ベクトル※スカラー
ベクトル※行列
ベクトル※矩形
なんであれ型変換された方が良いなら非メンバ
346:はちみつ餃子
19/11/28 18:23:49.08 +45JwpRI.net
>>339
なるほど、一般化した場合の話になってるわけね。
347:デフォルトの名無しさん
19/11/28 19:15:35.47 nxFPf5Ar.net
begin()とend()があればRangeなんですか?
348:デフォルトの名無しさん
19/11/28 23:41:46.98 iCLeSa8c.net
だいたいそうよ
349:デフォルトの名無しさん
19/11/29 04:19:50 KHTBF+uC.net
そうですか。
どうもありがとうございます。
350:デフォルトの名無しさん
19/11/29 08:06:17 R3LtoROu.net
新明解C++買ったけどなにもしてない
351:デフォルトの名無しさん
19/11/29 08:29:36 KHTBF+uC.net
std::uint8_tってstd名前空間にあるけど、名前空間で修飾しなくても使えるのは何故ですか?
352:蟻人間 ◆T6xkBnTXz7B0
19/11/29 08:53:08 7m3ynrwG.net
>>345
usingを使っているから。
353:デフォルトの名無しさん
19/11/29 09:06:38 KHTBF+uC.net
>>346
自分でusingしてなくても大丈夫ですか?
354:デフォルトの名無しさん
19/11/29 09:34:32 N/f9f1S7.net
a[i] = b;
みたいなのき
a に対して a.setitem(i, b); するのと
a.getitem(i) が参照を返す様にしておいて a.getitem(i) = b; するのと
どっちが正解?
355:デフォルトの名無しさん
19/11/29 09:41:11.46 B0LTR+GE.net
JavaのArrayListは a.get(i) = b; になってるので長いもんには巻かれろと思考停止で真似るだけ
356:デフォルトの名無しさん
19/11/29 11:40:28.80 oVgX/GuB.net
>>345
#include <cstdint>は
#include <stdint.h>
つまりCのライブラリだからだ
typedef unsigned char uint8_t;
#ifdef __cplusplus
namespace std {
using ::uint8_t;
}
#endif
こうなっているだけだ
357:デフォルトの名無しさん
19/11/29 11:53:00.94 Ml/gOmNO.net
さすがに整数型にまでstdつけるのはうざい
なのでcのヘッダーを使ってる
358:デフォルトの名無しさん
19/11/29 12:40:38.17 pYMGuCeV.net
stdを省略する方がウザい
359:デフォルトの名無しさん
19/11/29 12:45:20.21 gmGtMFq3.net
何の情報も増えないし紛れも何もない
意味の無い情報に5文字も余分に使いたくない
画面も入力の手間も
360:デフォルトの名無しさん
19/11/29 12:47:51.78 gmGtMFq3.net
int8_t がcharで、std::int8_t がsigned char とか?
それは御愁傷様
361:デフォルトの名無しさん
19/11/29 12:52:13.51 lef7gBlN.net
STL使ってスタティックビルドしてるコンソールプログラムあるけど、
ファイルサイズ 400KBぐらいだな。圧縮した状態で200KB
これが20KBぐらいに減るのかー、でも誰も喜ばないだろうな。
362:デフォルトの名無しさん
19/11/29 13:01:25.99 0dBBAnUQ.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
363:はちみつ餃子
19/11/29 14:15:39.12 J8eB3+F9.net
>>350 >>350
cstdint 内の名前はマクロを除いて std に入るはず。
グローバル名前空間でも定義されるかどうかは処理系定義じゃなかったっけ?
逆に stdint.h 内の定義はグローバル名前空間でアクセスできるけど、
std 内でも定義されるかどうかは未規定だったように記憶してる。
仕様を読み返すのが面倒なので誰か調査よろ。
364:デフォルトの名無しさん
19/11/29 14:21:40.41 Tp6caFY5.net
変数名をメモリやオーバーヘッド無しでエイリアスつける方法ありますか?
メンバ変数に shared_ptr<Data> m_data; みたいなのがあるとして
using text = this->m_data->member.text;
みたいに使いたい変数だけ別名で取り出したい
365:デフォルトの名無しさん
19/11/29 14:30:09.62 oVgX/GuB.net
現実問題としてCのライブラリをstdに入れるということ自体が馬鹿げた話だ
今の流れはuint8_tの話だが、extern "C"の関数は装飾名に名前空間が含まれない
366:デフォルトの名無しさん
19/11/29 14:35:12.66 yQ0DwMtc.net
>>358
一番簡単なのは、
auto &text = this->m_data->member.text;
とすることです。
367:デフォルトの名無しさん
19/11/29 14:37:49.63 Tp6caFY5.net
>>360
現状それでやってますが、コンパイル時に確定できるのなら他に方法があるのかと思いました
368:はちみつ餃子
19/11/29 14:45:49.13 J8eB3+F9.net
>>361
そういう簡単なケースだと最適化でちゃんと消えてくれるんじゃね?
369:デフォルトの名無しさん
19/11/29 14:56:28.90 KzrCIvE1.net
参照解決のコストすら嫌なら
#define text this->m_data->member.text
370:デフォルトの名無しさん
19/11/29 14:56:51.37 GB3X2IZU.net
コンパイル時に確定してるじゃん
371:デフォルトの名無しさん
19/11/29 15:07:19.89 M3WjIH4t.net
むしろもとの書き方だと2度参照解決して3度足し算しているような…
372:デフォルトの名無しさん
19/11/29 15:21:18.81 YkvT9y9m.net
textに実行時にアクセスするなら
いずれにしろアドレス計算は必須になる
>>360のようにすれば
最適化がうんこで複数回計算されるのを防ぐ可能性すらある
アクセスしないならおそらく最適化によってアドレス計算コードは生成されない
373:デフォルトの名無しさん
19/11/29 15:50:36.19 N/f9f1S7.net
inline付けるとかえって損か
374:デフォルトの名無しさん
19/11/29 17:45:51.93 /RbGsSZk.net
m_data の型が shared_ptr<Data> なことを気にしてるのかな。
shared_ptr の指す先のメンバを参照変数でバインドするのは無作法か、とか。
と言うか、上の話は俺の疑問でもあるんだけど。
375:デフォルトの名無しさん
19/11/29 18:15:50.93 4DEcYZGM.net
->
に副作用があるならそりゃ話は別だ
376:デフォルトの名無しさん
19/11/29 18:44:49.74 xP2G2+ZO.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?
377:デフォルトの名無しさん
19/11/29 18:46:27.54 xP2G2+ZO.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?
え?なんで俺が笑われてるの?
378:デフォルトの名無しさん
19/11/29 20:21:36.93 KHTBF+uC.net
どうもありがとうございます。
379:デフォルトの名無しさん
19/11/30 16:27:23.28 4Yq6PogE.net
constexpr定数とconst定数って結局何が違うの?
380:デフォルトの名無しさん
19/11/30 16:40:26.74 WebQyLi7.net
コンパイラに対する単なるヒント
優れたコンパイラでも糞コンパイラでも動きほ同じ
中途半端なコンパイラだと最適化のレベルがもしかしたら違うかも
コンパイル単位にもよる
381:デフォルトの名無しさん
19/11/30 17:34:29.84 sGzVq6Pz.net
constexpr定数はコンパイル時に値が確定することが保証されている
382:デフォルトの名無しさん
19/11/30 17:35:37.90 iKPiHg5H.net
>>373
constexpr定数はconstexprな文脈を作る。つまり、
constexpr int a = func()
とするとfunc()はコンパイル時に実行される。当然constexpr関数でなければならない
一方、const定数はconstexprな文脈は作らない
const int a = func()
とした時、func()は実行時に処理される。constexpr関数である必要はない
383:デフォルトの名無しさん
19/11/30 17:40:18.
384:51 ID:4Yq6PogE.net
385:デフォルトの名無しさん
19/12/01 01:46:51.73 j3uX5vWG.net
constexprの強みは、配列のサイズみたいな定数を要求される文脈で使えるってこと。
const変数だとこれができないから、昔はマクロで定数定義するしかなかった。
386:デフォルトの名無しさん
19/12/01 01:49:20.00 Hj4I5N6m.net
>>378 C++ではconst変数も一部定数式扱いになってたでしょ。だから>>373みたいな疑問が出る。
387:デフォルトの名無しさん
19/12/01 01:54:44.83 Nfz3Rlxp.net
sizeofと何が違うんだ
388:デフォルトの名無しさん
19/12/01 08:35:44.43 7fh/nHBZ.net
constは設計ミスが多いな
389:デフォルトの名無しさん
19/12/01 08:36:58.95 7fh/nHBZ.net
とても神リッチーが作ったように見えない
390:デフォルトの名無しさん
19/12/01 10:24:23.58 gHT6E7kc.net
STLにはなぜ木が無いのですか。
391:デフォルトの名無しさん
19/12/01 10:27:51.87 sKSeAmO2.net
大昔のC言語時代に考えた物だから
関数を使った初期化が出来ない時代の
392:デフォルトの名無しさん
19/12/01 10:31:53.72 sKSeAmO2.net
>>383
std::set とか、内部は木じゃね?
汎用的な木?
ポインタのvectorで良くない?
393:デフォルトの名無しさん
19/12/01 10:56:13.36 SqfEoEmM.net
Javaでも.NETでも標準ライブラリに木は無いだろ
木はメモリへのシリアライズの仕方を工夫せずに素直にノード毎にnewしてたら殆どあらゆるケースにおいてクッソ非効率なデータ構造なので、
標準ライブラリとして提供する意義が薄い
誤った選択肢を提供することで余計にパフォーマンスを低下させることになるだけだ
394:デフォルトの名無しさん
19/12/01 11:03:00.54 sKSeAmO2.net
listもsetもノードごとにnewしてるけど
395:デフォルトの名無しさん
19/12/01 11:15:38.03 gHT6E7kc.net
ダブルアレイを変形させて木を表現できないでしょうか。
子は親のIDを知っていれば良く、親は子の個数を知っていれば良いので、出来そうな気がするのですが。
396:デフォルトの名無しさん
19/12/01 11:16:42.54 SqfEoEmM.net
>>387
うん。だから遅いよ。
397:デフォルトの名無しさん
19/12/01 11:29:39.61 7fh/nHBZ.net
だから形容詞には比較や数値をつけろってば
それじゃ健康産業で不安を煽る悪徳業者そっくりだろうが
398:デフォルトの名無しさん
19/12/01 11:50:38.89 p3Z7Nr0h.net
遅いlistやsetがstlに入っていて使われ続けてるんだから
stlに入れない理由にはならないってことだよあほ
399:デフォルトの名無しさん
19/12/01 11:53:33.72 rKmqg7A0.net
いやそんなもん使うやつらがそもそもc++使う必要がねーって話だわ
400:デフォルトの名無しさん
19/12/01 11:55:51.88 YWi4MX0G.net
それはお前の個人的な意見?
それとも何かデータでもあるの?
401:デフォルトの名無しさん
19/12/01 12:11:13.07 p3Z7Nr0h.net
listやsetが適した用途があるから存在してるんだけどね
使いどころ間違ってるんじゃない?
402:デフォルトの名無しさん
19/12/01 12:14:27.64 p3Z7Nr0h.net
同じ用途なら
newやdeleteを使わなかったとしても
結局ノード作成時に空きエリアを探すことになるわけで
403:デフォルトの名無しさん
19/12/01 12:17:14.00 p3Z7Nr0h.net
ノード追加専用のスペシャルlistやsetなら速くなるけど
それはもはやlistやsetじゃない
404:デフォルトの名無しさん
19/12/01 12:21:44.69 vEIKl7N1.net
プログラムのすべての部分で最速の選択をする必要なんて全く無いのに>>392みたいなことを言うやつはCかFortranで書けばいいんじゃないかな
405:デフォルトの名無しさん
19/12/01 12:29:30.42 SqfEoEmM.net
>>394
残念ながら、setはともかくlistが適しているシーンは実際にはほとんどない
途中への少数の要素の挿入削除が頻繁にあって事前にその位置が分かっている状況などどれほどあるというのか
406:デフォルトの名無しさん
19/12/01 12:32:06.35 p3Z7Nr0h.net
>>398
使いどころがわからないなら無理して使わなくて良いんだよ
407:デフォルトの名無しさん
19/12/01 12:33:53.83 SqfEoEmM.net
>>399
具体例を示そうね
408:デフォルトの名無しさん
19/12/01 12:34:14.31 p3Z7Nr0h.net
>>397
10%の高速化なら無視すればいいけど
1000倍とかなら考えるだろ?
vectorとlistとsetの選択を間違えると
そのくらいの差が出る
データ数が多ければ
409:デフォルトの名無しさん
19/12/01 12:41:44.01 IheeS71f.net
ソートが早い
410:デフォルトの名無しさん
19/12/01 12:47:37.78 gHT6E7kc.net
イテレータの安定性が。
411:デフォルトの名無しさん
19/12/01 12:53:47.75 ZEhocPVE.net
>>397
最速のものを使う必要はないがそもそもアルゴリズムオーダーが間違ってるようなものを
使うってのは頭悪すぎるし、なぜc++使ってんの?バカなの?ファッション?
って気にしかならん。
412:デフォルトの名無しさん
19/12/01 12:57:04.85 7fh/nHBZ.net
「そんなもん使う」なんて全面否定しといて
今さらアルゴリズムオーダーとか言い出すのは見苦しい
413:デフォルトの名無しさん
19/12/01 12:58:17.95 gHT6E7kc.net
木とグラフが足りないと思います。
414:デフォルトの名無しさん
19/12/01 12:58:25.43 n5DjgtsH.net
イニシャルコストとランニングコストがあるだろ
数か月~数年間止まらないようなソフトウェアだと初回起動時のデータ読み込み10億件・数分程度は誤差で済む
415:デフォルトの名無しさん
19/12/01 13:00:02.95 IheeS71f.net
現存するあらゆるコンテナを実装してくれ
416:デフォルトの名無しさん
19/12/01 13:00:34.69 YWi4MX0G.net
>>401
> 1000倍とかなら考えるだろ?
いや? 0.0001ミリ秒が0.1ミリ秒になったところで
大した問題じゃないからね
417:デフォルトの名無しさん
19/12/01 13:02:56.20 7fh/nHBZ.net
実害が出るかどうかはケースによるのに
全てお見通しの仏様か何かになったつもりのやつが変なことぬかすんだよな
418:デフォルトの名無しさん
19/12/01 13:08:14.41 p3Z7Nr0h.net
>>409
1分と1000分なら大違い
トータル0.1ミリ秒なら何でも良いよ気にするな
データが多い時の話
オーダーが効いてくる
newの時間なんてオーダーの差に比べれば誤差
毎回newだから遅いとかトンチンカン
419:デフォルトの名無しさん
19/12/01 13:09:03.33 gHT6E7kc.net
Boostにイテレータが安定なvectorがありますが、速度はlistに劣る場合があると但し書きがありますよ。
420:デフォルトの名無しさん
19/12/01 13:16:11.26 p3Z7Nr0h.net
データ構造は
list, set, リニア(vectorやdeque) で揃ってる
これでオーダー的には大抵は問題ない
微妙な高速化が必要なら専用を自作すれば良いが
組み込みでもなければ必要となることはあまりない
複雑なデータ構造は、
標準のデータ構造を組み合わせて作る
複雑なリンク構造はSLAMの世界だとよく使う
421:デフォルトの名無しさん
19/12/01 13:20:19.28 ZEhocPVE.net
いや明らかにsetのオーダーに問題あるだろ。
422:デフォルトの名無しさん
19/12/01 13:23:43.76 p3Z7Nr0h.net
えっ?
423:デフォルトの名無しさん
19/12/01 13:25:41.03 ZEhocPVE.net
思考停止してないでこれくらいは読んでくれよ。。
URLリンク(cpprefjp.github.io)
424:デフォルトの名無しさん
19/12/01 13:31:07.65 gHT6E7kc.net
読みました。
425:デフォルトの名無しさん
19/12/01 13:31:36.80 B2zYeZ5e.net
メモリの再配置が起こると都合が(あるいは効率が)悪いオブジェクトを比較的頻繁にnew/deleteしつつ、
一覧を保持しておく用途にはlistが適していると思う。
あ、でも、本体をdequeに、ポインタをvectorに入れて管理する方が速いかな? バグりそうで恐いけどw
426:
19/12/01 13:51:31.01 mRJ420VP.net
>>386
木をそこまで悪くいう人を初めて見かけました、大概のデータ構造は木だと思うのですけど…
427:デフォルトの名無しさん
19/12/01 13:56:38.18 p3Z7Nr0h.net
下手くそが巨体な木を作るとひどいって話だろ
下手に作らなきゃ良いだけ
428:デフォルトの名無しさん
19/12/01 14:14:45.54 YC7h427T.net
>>414
問題にならない用途、条件のもとで使う分には問題ない。
429:デフォルトの名無しさん
19/12/01 14:32:23.94 9nkP+L/s.net
きみはあれか
「ライトバンはセダンにくらべると速度も遅いし馬力もないしとてもあんなもの使えない!」
とかいっちゃうタイプ?
430:デフォルトの名無しさん
19/12/01 14:47:10.92 HFxN8/oH.net
>>419
お前は頭が悪いけどな
431:デフォルトの名無しさん
19/12/01 15:33:24.99 zRxwjdrk.net
一般的には、適切な二分木等で実装されたSetは、メモリ効率が悪いことはあっても速度のオーダーがひどいってことは無いだろ
432:蟻人間
19/12/01 15:40:09.97 CG2Vs9XU.net
C++11のstd::unordered_setに負けてる。
433:デフォルトの名無しさん
19/12/01 15:45:18.33 7fh/nHBZ.net
それはまた別な話だ
434:デフォルトの名無しさん
19/12/01 16:25:31.35 BhgcTKiH.net
二分木がSTLにない理由は簡単。冗長だから。
435:デフォルトの名無しさん
19/12/01 16:26:58.04 p3Z7Nr0h.net
setは内部2分木だって言ってるのに
436:デフォルトの名無しさん
19/12/01 17:09:51.64 7fh/nHBZ.net
>>422
うまい喩えだなw
437:デフォルトの名無しさん
19/12/01 17:18:14.34 BhgcTKiH.net
>>428
もしかして二分探索と二分木を混同してる?
438:デフォルトの名無しさん
19/12/01 17:33:23.47 YHuSOkLJ.net
木の枝を回廊にしたらグラフになります。
グラフはスパコンのベンチマークにされるくらいにメジャーな構造です。
439:デフォルトの名無しさん
19/12/01 17:36:46.35 YWi4MX0G.net
>>411
自分で言ってるやん?
データが少ないときなら気にする必要はないので、
データが少ないとき用のアルゴリズムとして
「遅いけど便利」はあったほうが良いだろ
440:デフォルトの名無しさん
19/12/01 18:14:48.13 XkMP/E25.net
普通ハッシュ使うよね?とかそういう発想が皆無なのが、
ここは馬鹿しかいないってことを示してるよな。。
441:デフォルトの名無しさん
19/12/01 18:19:34.55 Enyr5Fgf.net
>>430
多分混同してるのはお前だけかと
442:デフォルトの名無しさん
19/12/01 18:22:27.22 Enyr5Fgf.net
>>433
バカはお前
set は一般的に、二分木として実装される。
URLリンク(cpprefjp.github.io)
443:デフォルトの名無しさん
19/12/01 18:36:45.84 n5DjgtsH.net
ハッシュを使うんじゃねえな
ハッシュをどう作るか?になる
perl5/hv.h at blead ・ Perl/perl5 ・ GitHub
URLリンク(github.com)
cpython/dict-common.h at master ・ python/cpython ・ GitHub
URLリンク(github.com)
444:デフォルトの名無しさん
19/12/01 18:53:22.71 ManO1ilk.net
木やグラフがほしいって言ってる人が、ハッシュマップや内部実装だけが木構造のコレクションなんていらんだろ。。
445:デフォルトの名無しさん
19/12/01 19:11:19.73 IheeS71f.net
うんち
446:デフォルトの名無しさん
19/12/01 19:20:12.56 fP4CRSrQ.net
「木が欲しい」という要件に対して確認もなく二分木渡すような奴はダメ
ディレクトリ構造表したい奴に二分木渡してどうすんだ
447:デフォルトの名無しさん
19/12/01 19:25:06.56 WB/GHlzr.net
二分木って規格で決めてるの?
448:デフォルトの名無しさん
19/12/01 19:36:32.68 IheeS71f.net
うんち
449:デフォルトの名無しさん
19/12/01 20:13:00.99 p3Z7Nr0h.net
「木が欲しい」なんていう人には
とりあえず何でもいいから木を渡しておけばいいんだよ
450:デフォルトの名無しさん
19/12/01 20:31:05.42 p3Z7Nr0h.net
木は用途や使い方次第で適する作り方が異なるので
標準コンテナを組み合わせたカスタムで良いと思うよ
451:デフォルトの名無しさん
19/12/01 20:51:16.81 YHuSOkLJ.net
URLリンク(ideone.com)
ほら~。あそこに見えるのがN分木のさんぷるだよ~。
デバッグしてないから酒の肴にぴったりだよ~。
452:デフォルトの名無しさん
19/12/01 21:01:15.36 BhgcTKiH.net
C++11以降なら子ノードをweak_ptrの配列で持つとか?
453:デフォルトの名無しさん
19/12/01 21:09:55.37 YHuSOkLJ.net
>>444
言い忘れていたが、このスレから取得したN分木のコード(>>444)はMITライセンスです。
改造して変な構造を作ろう!
454:デフォルトの名無しさん
19/12/01 21:31:39.82 vEIKl7N1.net
著作権表示なしにMITライセンスにできたっけ
455:デフォルトの名無しさん
19/12/01 22:14:07.56 9WgCOaQB.net
サンプルとかライセンスとか頭沸いてんのかこいつ
下痢便を神棚に飾って人に配るような所業
456:デフォルトの名無しさん
19/12/01 22:32:33.44 YHuSOkLJ.net
著作権表示は、
2019 Yakitori
が必要なら使って。
457:デフォルトの名無しさん
19/12/01 22:32:48.31 YHuSOkLJ.net
>>449
日本語不自由だな
458:デフォルトの名無しさん
19/12/01 22:38:20.61 vEIKl7N1.net
?
459:デフォルトの名無しさん
19/12/01 22:41:32.80 IheeS71f.net
うんち漏れそう
460:デフォルトの名無しさん
19/12/02 00:33:17 RIgVO6ZZ.net
>>448
だな
461:デフォルトの名無しさん
19/12/02 02:45:23.23 btxUm/V/.net
オランダのTIOBEの調査でも、C#よりJavaやC/C++が人気で、
他の会社による日本での求人数もJavaやC/C++の方がC#より上だそうだ。
JavaScript、PythonやRubyは、求人数では大したことが無いらしい。
Webページを製作している人がネットでは多いので、JS、Python、Ruby
などが人気であるかのように見えるだけかもしれない。
462:デフォルトの名無しさん
19/12/02 03:22:15 Lvay36w9.net
>>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 はかなり下の方。
463:デフォルトの名無しさん
19/12/02 03:29:10.52 Lvay36w9.net
>>455
個人的見解としては、VS code が 5ch で評価が高かったのは、言語が
TypeScript や JavaScript と HTML で記述されているので、JSで
プログラムすることを希望するプログラマが、JSの求人を増やすために
JS製の成果物を高く評価していたからかもしれない。
また、Javaの伸び率はかなり高い。Rubyの求人は日本では多いようだが、
アメリカでは少ない。C#の人気は、ある時期までは延びたが、今は停滞期
に入ったようだ。しかも今後学びたい言語としては、C よりも低い。
464:デフォルトの名無しさん
19/12/02 03:36:47.51 Lvay36w9.net
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)
465:デフォルトの名無しさん
19/12/02 03:57:59.67 qRRc8YVo.net
CとC++とC#の区別ができる営業いないんだよな
466:デフォルトの名無しさん
19/12/02 04:06:59 3lD7gpLY.net
営業って年取った技術者がやるもんだろ
467:デフォルトの名無しさん
19/12/02 06:49:53 MoZo3p1s.net
今はもう戦力外技術者なんて即解雇だよ
そもそも大手だと営業と技術者は別会社
468:デフォルトの名無しさん
19/12/02 07:41:42.15 tW9RdYoY.net
なんで大手条件が勝手に加わるのか
469:デフォルトの名無しさん
19/12/02 08:23:03 mQVkXZA1.net
零細中小なんて誰も興味ない
470:デフォルトの名無しさん
19/12/02 08:42:45.44 GldGaTIn.net
比較するもんじゃないだろ
C++は好きだが、在庫管理システムをC++で書けと言われたら全力で拒否してC#を推すぞ俺は
471:デフォルトの名無しさん
19/12/02 11:06:47 5u9Q6RC4.net
ほんとそれだな
きみらはいつになったらライトバンとセダンの使い分けができるようになるのか・・
472:デフォルトの名無しさん
19/12/02 11:42:23.75 L9XsPrRa.net
>>464
君「ら」?
お前のことだろ
473:デフォルトの名無しさん
19/12/02 13:15:55 /N45p/D+.net
でもJavaはベンチとると速いんだけど、実際は遅い。
これ、リソースを食いすぎるのが原因なので、本当はサーバーよりクライアントに向いているんじゃないのかな。
474:デフォルトの名無しさん
19/12/02 13:16:09 xJykAg3Z.net
ライトバンとセダン?
スリッパと自転車と乗用車と飛行機とロケット
くらい使い分けないとダメ
475:デフォルトの名無しさん
19/12/02 13:19:02 /N45p/D+.net
C++はメモリーの分断化があるので、長時間起動し続けるサーバーには向いていないと言われてるんだけど、実際にやってみたら全く問題なかった。
考えてみると、JavaプログラムをホストするシステムがC/C++で書かれてるんだから、本当に問題になるなら、Javaも無理なはず。
476:デフォルトの名無しさん
19/12/02 13:20:28 /N45p/D+.net
Androidは特に不満もなく動くので、Javaはクライアントでこそ力を発揮するような気がします。
477:デフォルトの名無しさん
19/12/02 13:21:19 xJykAg3Z.net
メモリは潤沢にあるし
アドレス変換もあるので
よほど下手に作らなければ
PCでフラグメントは問題にはならない
そんな事を心配する時代じゃない
組み込みだと話は別
478:デフォルトの名無しさん
19/12/02 13:21:57 /N45p/D+.net
機種ごとの差を言語が吸収
479:してくれるなら、こんな楽なことないし。 一方、サーバーは、サービス提供側が機種を自由に選べるのでJavaである必要が無いと思う。
480:デフォルトの名無しさん
19/12/02 13:23:17 xJykAg3Z.net
>>469
比較的最近追加された
リアルタイム系オーディオAPIは
C/C++での提供ですね
用途によってはいまだにC/C++が必要
481:デフォルトの名無しさん
19/12/02 13:23:19 /N45p/D+.net
>>470
でも、フラグメントが・・・と言われると、なるほどと思うじゃないですか。
僕もいずれ別の言語で書き換えるつもりだった。
でも問題なかった。
482:デフォルトの名無しさん
19/12/02 13:30:11 wB1a1keO.net
>>468
それは完全に理解不足
Javaや.NETのVMはC++で静的に確保した大きなメモリ領域をヒープと呼んでいる
でアプリ内でnewするとオブジェクトとしてその中の領域が割り当てられ、ハンドル(生ポではない!)をアプリがオブジェクト参照として受け取る
C++のオブジェクトとの大きな違いはオブジェクトを再配置できることであり、
GCが必要に応じてヒープ上のオブジェクトを移動して詰めるため断片化が生じにくい
C++でも生ポを使わなければ再配置できるんだけどね
483:デフォルトの名無しさん
19/12/02 13:31:49 az4xQt0G.net
メモリ激増のお陰じゃねえの
484:デフォルトの名無しさん
19/12/02 13:41:55 qRRc8YVo.net
その辺はOSの仕事であるべきやと思うわ
485:デフォルトの名無しさん
19/12/02 13:49:06 az4xQt0G.net
やってることがさほど変わらず100MB確保から1GB確保にするだけで
断片化率が1/10になる
プログラミングの技量が全く変化しないのにも関わらず安全性が10倍になる
つまりマシンの搭載メモリが1GBから10GBになるだけで安全係数が10倍になる
これぞ大富豪プログラミング
486:デフォルトの名無しさん
19/12/02 15:06:09.31 rcvN6dfE.net
>>474
windows3.1のGlobalAllocみたいのを今さらドヤられても…
487:デフォルトの名無しさん
19/12/02 15:20:31.50 Vo2mhncO.net
>>468
実はかなり古くから、C/C++ の malloc(), new のヒープメモリから確保したメモリの
断片化は、実際に問題になるようなことはとても少ないといわれています。
というのは、断片化というのは、確保したメモリを開放したときに出来た
「隙間にある空きメモリ」が再利用されにくい場合に起きるものなんですが、
実際には、再利用されることが多いためです。なぜなら、おなじサイズの
オブジェクトを new することが多いためです。この場合、完全に再利用されるので
断片化の問題と言うものは全く起きないと言っても過言では有りません。
それから、通常、1つのオブジェクトのサイズは小さく、それが多数集まって
データをなしていることが多いのです。このことから、異なるサイズのオブジェクト
であっても、1つ1つのオブジェクトのサイズが小さいため、断片化したとしても、
再利用される確率が高いのです。まず、同じサイズのオブジェクトであれば再利用されます。
異なるサイズであっても、昔開放されたオブジェクトよりも、小さいサイズのオブジェクトを
新しく確保する場合であれば再利用されます。
このようなことから現実の例では、断片化しても、使われないメモリの量はある程度の比率
に収まると言われており、それは GarbageCollection を行うためのオーバーヘッドの
メモリのサイズと比べても余り大きいものではないのです。
ゲームはメモリー効率も求められますが、それでも C/C++ が使われているのは、
メモリー断片化の量が一定比率より多くなら無い事が経験的に知られているためです。
488:デフォルトの名無しさん
19/12/02 15:28:19.20 /N45p/D+.net
フェイスブックがPHPのコードを翻訳機でC++コードに変換して配備してるそうですが。
そんなことするなら最初からC++で書けばいいのに。
489:デフォルトの名無しさん
19/12/02 15:33:38.42 Vo2mhncO.net
>>474
C/C++ では、配列ではなくリンクリストを積極的に使うようにすることに
よって、メモリーが断片化しても再利用される確率を高く
490:することができます。 というのは、データの基本となっている要素のオブジェクトのサイズが 小さいため、さまざまなサイズのデータを new しても、結果的に、 断片化された空きメモリも高い確率で再利用されるためです。 new、delete するオブジェクトのサイズがランダムな場合で、 断片化空きメモリが残っている場合、確率論的には、おおよそ 2回に1回は 断片化空きメモリが再利用されることになるでしょう。もちろん、 delete された回数が少な過ぎる場合、そもそも断片化空きメモリの個数が少なすぎる ので、再利用できる確率は低くなります。それは、初期化時やファイルからデータ 読み込み時などにどんどんメモリを new していくよう場合ですので、そもそも 断片化が起きる余地も有りません。 なお、ポインタとリンクリストを組み合わせると、よくある場合には、他の 集合アルゴリズムよりも、効率が高くなりやすいことが知られています。 ただし、文字を集合させて文字列を作るような場合は例外です。
491:デフォルトの名無しさん
19/12/02 15:39:04.52 Vo2mhncO.net
>>481
配列の場合、delete するとメモリー上に大きな空き領域が出来ますが、
それより大きなサイズの配列を new しようとすると、そこが再利用できません。
なぜなら、配列の場合、連続したメモリ領域が固まって必要になるため、
要素の個数が N だとすると、N 個全てが一度にまとまって入りきる領域を探す
必要になるためです。
ところが、リンクリストの場合、要素数 N が大きくなっても、バラバラな
領域に分散して格納することが出来ます。すると、とても高い確率で、
分断化された空きメモリが再利用されることになります。
492:デフォルトの名無しさん
19/12/02 15:50:07.84 Vo2mhncO.net
>>481
「2回に1回」と書きましたが、実際にはもっと確率は高いです。
リンクリストを使っている場合、要素を全部 delete したような場合は、開放された
空きブロックは、余り断片化せずに、比較的高い確率で結合され、大きな空きブロックに
なるためです。空きメモリは、元の要素のサイズの複数個分以上になっている確率が
高くなります(複雑ですが、管理領域のサイズもこれに加わります。)。
この性質があるため、現実には、小さいサイズのオブジェクトを要素とする集合
が多種類有った場合、それを好きに new, delete した場合、50% よりずっと高い確率で
断片化空きメモリーは再利用されます。
493:デフォルトの名無しさん
19/12/02 16:10:33.93 Vo2mhncO.net
>>483
誤解無きように細くしておくと、「50% より大きい」というのは、
「断片化された空き領域が再利用される確率」
のことで、「断片化率」ではありません、。断片化率はもっと
小さな値になり、条件によりますが、例えば、数%~10%程度
が目安になります。最悪のケースだともっと大きいのですが、
ケースバイケースで適切なデータ構造(集合アルゴリズム)を
使っているとこの程度に収まります。また、適切なデータ構造を
選択することはそんなに難しいわけではありません、。
494:デフォルトの名無しさん
19/12/02 16:15:53.26 Vo2mhncO.net
>>475
既に、Windows95くらいの時期のメモリ容量で、C/C++のメモリ断片化は
問題が無い程度になっていました。実際には、MS-DOSの時代でも既に
問題なかったのですが。
とにかく、今の若い人の目線で言えば、古代ともいえるくらい古い時代に
既に C/C++ のメモリー断片化問題は問題が無い程度にハードウェアが
発達済みなのです。PC-8801 の 8BIT 時代には問題があったので、
N88-BASIC を筆頭に、GarbageCollection 方式をとっていましたが、
それは、若い人には「超古代文明」時代でしょう。
495:デフォルトの名無しさん
19/12/02 16:34:28.08 Vo2mhncO.net
>>485
また誤解が入りそうなので細くしておきます。
N88-BASIC などが GarbageCollection を使っていたのは、本当に
マシンのメモリが少ないのでデータをぎゅーぎゅー詰めに隙間無く
入れることが重要だったためです。
一方、JavaやC#がGarbageCollection を使っているのは、どちらかと
いうと、「メモリー開放の自動化」のためです。参照カウンタだけで
は、循環参照問題が生じるため、時々、広い範囲のメモリブロックを
巡回して、循環参照していても本当に使って無い場合を厳密に見つけ出して、
徹底的に開放することを行います。
そのため、メモリーの断片化問題とはまた違う意味で、メモリー開放の
自動化には、GarbageCollection が必要となっています。
N88-BASIC 時代と、現在の Java, C# とでは、同じ GarbageCollection
でも主な役割が違うと考えられます。もちろん、断片化を防ぐ役割も同時に
果たしてくれますが。
496:デフォルトの名無しさん
19/12/02 16:40:43.00 Vo2mhncO.net
>>486
誤字訂正: 細く ---> 補足
・BASIC言語にはポインタが無かったので、循環参照問題は有りませんでした。
・BASIC言語における GarbageCollection は、主に文字列領域の開放のためです。
A$="HELLO WORLD" と入れた後、A$="" とした時、元の文字列に使っていた
領域は、しばらく経った後に GarbageCollection で開放される仕組みでした。
ですので、文字列を余り使わなければ GarbageCollection も余りおきませんでした。
なお、DIM A(100) のように確保した配列は、余り開放することは有りませんでしたが、
開放した場合も、しばらく後に GarbageCollection の対象になっていたと思われます。
497:デフォルトの名無しさん
19/12/02 17:06:01.34 wB1a1keO.net
リンクリストってシーケンシャルアクセスで毎回キャッシュミスするから、
配列の代わりに全面的に使ったりしたら断片化とか最早どうでもいいレベルでパフォーマンス低下するぞ
498:デフォルトの名無しさん
19/12/02 17:15:40.51 Vo2mhncO.net
>>488
リンクリストでシーケンシャルアクセスする場合、キャッシュ以前に
ポインタをたどるようにアクセスしないといけないのですが、
最近、配列と同じような通し番号方式でアクセスしようとする人が
多くなっています。ライブラリなどは、以前にアクセスした番号が
k の場合、そのポインタを覚えておいて、プログラマが k + 1 の番号
をアクセスしようとした場合、後続のノードへのポインタをたどる
ことで高速化している場合があるので、特に問題が無い場合がありますが、
それを深く理解せずに、本当に先頭のノードからたどってしまった場合、
本来なら O(N)で済むところが、O(N^2) になってしまいます。
499:デフォルトの名無しさん
19/12/02 17:16:14.80 /N45p/D+.net
>>487
ヌルポ。
500:デフォルトの名無しさん
19/12/02 17:18:32.46 Vo2mhncO.net
>>489
C/C++ でのリンクリストは、場所を覚えるのは通し番号ではなく、ポインタ
で行うことが基本です。ところが、最近、通し番号で覚えてしまうプログラムを
書く人が増えているように感じます。それは、キャッシュのために遅くなっているの
ではなく、計算オーダーが完全に違ってくるために遅くなるため、ただごとではない
遅さを招きます。
501:デフォルトの名無しさん
19/12/02 20:46:52.56 rSqEF7g8.net
ネトウヨ東大特任准教授、謝罪するも言い訳「AIの過学習によるもの」
スレリンク(jsaloon板)
502:デフォルトの名無しさん
19/12/02 20:59:09.09 RyZvLJkF.net
>>487
循環参照問題の有無はポインタ(アドレス)とは関係ないでしょ。
503:デフォルトの名無しさん
19/12/02 21:16:13.89 6AEGHd3a.net
TIOBEってなんて読めばいいの?
ちおべ?
504:デフォルトの名無しさん
19/12/02 22:59:36.28 OlcC/UBE.net
ハッシュテーブルで要素Xが既存要素Yと衝突した場合でもXを格納したい場合は
リハッシュかリストになる
キモス
リハッシュで容量をちゃんと使い切るには相当にハッシュ関数を考えねばならない上に
衝突データを取り出すのに何回リハッシュしたかを見ながら要素をたどっていく必要があり、
ハッシュの検索性を帳消しにしてしまいかねない
よってリストのが圧倒的に簡単で速い
505:デフォルトの名無しさん
19/12/02 23:15:49.08 OlcC/UBE.net
>>493
ある
ガベージコレクト対象データでもって他のガベージコレクト対象データを指し示すような
再帰構造が表現不可能なら循環参照は当然起きない
N88-BASICの文字列はキャラクターの集まりであって他の文字列を指し示したりできないから、
相当の無能か悪意を伴って設計しない限り、文字列メモリのガベージコレクションで
循環参照は起こしようが無い(やるべきことは素のmalloc/freeに他ならない
506:デフォルトの名無しさん
19/12/02 23:29:11.52 VdJ0qliF.net
>>496
>>487で自分で書いているように配列がガーベジコレクションの対象になっているなら、循環参照は起こり得るんでないの?
507:デフォルトの名無しさん
19/12/02 23:30:20.73 VdJ0qliF.net
すまん>>497はまちがい
508:デフォルトの名無しさん
19/12/03 04:41:05.52 LCf1R81a.net
まだやってたのか
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
509:デフォルトの名無しさん
19/12/03 06:45:35 Ocr+v9UU.net
C++20あたりになるともうついていけそうにないな。
510:デフォルトの名無しさん
19/12/03 07:20:16 k7viogN8.net
conceptの仕上がり次第だろうな
Cのrestrictもそうであるように
うるさすぎると嫌気がさすやつが続出する
511:デフォルトの名無しさん
19/12/03 14:10:18.28 LOAssVxZ.net
実際にコードを書いてないやつほど仕様を知っててアホみたいなこだわりを見せる
ってことが常態化してる。
そろそろロクでもない結末を迎える。
512:デフォルトの名無しさん
19/12/03 14:24:39.60 jKB+EPlO.net
並列処理じゃないですかねこれからは
マルチなコアをもりもり使えないと
513:デフォルトの名無しさん
19/12/03 14:38:06.74 g2sdmHcp.net
>>502
仕様を知ってるのは良いけど
コードを書いてない人は気にするところがズレてる
514:デフォルトの名無しさん
19/12/03 15:33:28 +wDBcAl/.net
コンパイラやパーサーを作っているか、本を書こうとしている人だとすれば
隅々まで仕様を知る必要があるから、単なる自己満足の言語ヲタクとは
限らない。
515:デフォルトの名無しさん
19/12/03 15:40:53 LOAssVxZ.net
コンパイラやパーサを作ってる人よりも
本やブログを書くだけの馬鹿のが変な仕様にこだわってるのが問題。
後者は単なる自己満足の言語ヲタクと変わらん。
端的にカスでいなくなった方がいい存在と思う。
516:デフォルトの名無しさん
19/12/03 15:46:11 +wDBcAl/.net
>>506
自慢するために言語ヲタクになっている人は困るけど、本やブログを書く人は
貴重なので、情報収集のため5chでもなんでも使ってもいいと思うんだよ。
517:デフォルトの名無しさん
19/12/03 16:08:25 fg+LqIKK.net
現場でガリガリ書いてる奴らが本を書かないのが悪いんだろ
えっ、ブラック労働環境で疲弊してて書く余裕がないって?w
518:デフォルトの名無しさん
19/12/03 16:50:33.73 lE3mHjqg.net
ブログはともかく5chの情報を元に本を書くとか
勘弁してくれ
519:デフォルトの名無しさん
19/12/03 16:52:53.84 lE3mHjqg.net
>>508
解説本みたいなのは読まんな
規格書、データシート、仕様書、リファレンスマニュアル
こんなのは5chを参考にするはずがない
520:デフォルトの名無しさん
19/12/03 16:59:39.64 +wDBcAl/.net
>>509
全く知識が足りて無い場合、知ってる人に聞くと大幅な時間短縮になる事がある。
521:デフォルトの名無しさん
19/12/03 17:42:58.95 PvjGA/Sr.net
>>508
現場でガリガリって、コンパイラ開発してるとこのか?
そうでなければ普通言語の仕様なんか気にしてねーんだよ
むしろ仕様というか規格に詳しくないと使えない言語とか実用性無いわ
522:デフォルトの名無しさん
19/12/03 17:45:16.73 PvjGA/Sr.net
>>508
あとお前が知らんだけで、各分野の経験豊富な人がいくらでもその分野のコードを書くための本出してる
言語オタクには気付かんだろうけど
523:デフォルトの名無しさん
19/12/03 17:50:23.07 Ht46Ytqh.net
>>911
全く知識が無い人が本を書く????
何の本?
アンカーミス?
524:デフォルトの名無しさん
19/12/03 18:43:45.39 0IYpewor.net
未来へのアンカー
525:デフォルトの名無しさん
19/12/03 19:20:43.49 +wDBcAl/.net
>>514
考えてみれば、本を書く人はここでは聞かないかも。
526:デフォルトの名無しさん
19/12/03 19:21:46.86 +wDBcAl/.net
Stroustrap
527:の本とか高いし、cpprefemceは分かりにくいし、誰かに 聞いてみたくなる気持ちは分かるがな。
528:デフォルトの名無しさん
19/12/03 19:22:03.63 90Sp73uq.net
>>513
C++のコンパイラ分野でいいので2~3冊あげてみ
529:デフォルトの名無しさん
19/12/03 19:22:10.56 k7viogN8.net
けっ 言語についていけねえうえに
ろくな業績も出せてねえ真性ゴミクズが
書いたコードの量が多いんだと
精一杯のブラフで自我を保とうと必死こく
究極にくだらねえ茶番だろうが
530:デフォルトの名無しさん
19/12/03 19:25:02.10 A/ggV3OU.net
コードを書けないのがコンプレックス?
531:デフォルトの名無しさん
19/12/03 19:26:01.05 cEtr/lck.net
禿4はわかりやすかったけど、もう少し突っ込んだ話が読みたかったな。
532:デフォルトの名無しさん
19/12/03 19:26:43.98 cEtr/lck.net
禿4はキンドルのセールに出ることあるよ。
533:デフォルトの名無しさん
19/12/03 19:43:50.04 LOAssVxZ.net
禿4は量が少ないわけではないがc++を今からやるとしたら最低限ああなるだろ。
あれ以下に減らすのは実際無理。
534:デフォルトの名無しさん
19/12/03 19:55:41.70 PvjGA/Sr.net
>>518
そういう意味で言ったんじゃないんだが
>>519
>けっ 言語についていけねえうえに
>ろくな業績も出せてねえ
こういう前提はどっから来てんのかね
>>502,506 ,512みたいなことを言われるとそういう過剰反応するやつよく見かけるけど
>精一杯のブラフで自我を保とうと必死こく
>究極にくだらねえ茶番だろうが
鏡見た方がいいよ
535:デフォルトの名無しさん
19/12/03 21:01:44.02 z2MNOJTT.net
>>524
違うんなら証拠出してみろよ
言ってることが薄っぺらくてゴミクズにしか見えねえが
そういう俺にお見それしましたと言わしめる内容がおまえにあるか?
身バレするようなことでなくて結構だ
話している内容に深みを感じるかどうかだ
もう一度言う、おまえの言葉にはそれがまるでない
536:デフォルトの名無しさん
19/12/03 21:24:21.32 qY14OTyg.net
>>524
> そういう意味で言ったんじゃないんだが
意味わからん
本を出してるって言うなら具体的に挙げられるよね?
537:デフォルトの名無しさん
19/12/03 21:26:06.12 A/ggV3OU.net
おまいらスレタイ
538:デフォルトの名無しさん
19/12/03 21:30:25.58 3WzRY7Z3.net
実にC++erらしいこのスレにぴったりの会話だな
539:デフォルトの名無しさん
19/12/03 21:58:21.97 c+vMaKjo.net
>>525
お前も感情的に攻撃的に相手を罵ってるだけで、中身空っぽに見えるぞ。
お前の自己評価はもっと高いのかもしれないけど端から見たらただのバカだよ。
540:デフォルトの名無しさん
19/12/03 22:13:59.08 z2MNOJTT.net
>>529
おまえ誰?
541:デフォルトの名無しさん
19/12/03 22:43:52.58 Tjb84Rtt.net
「現場でガリガリ」って可愛い表現だなw
アマチュア精神がにじみ出てる
542:デフォルトの名無しさん
19/12/03 23:17:48.08 jKB+EPlO.net
禿禿言うなよ
気にしてるらしいぞ
543:デフォルトの名無しさん
19/12/03 23:39:54.64 l6CFXVtO.net
お前らがC++高等テクニックww持ってるのは分かったから
まずまともな設計上げてこいやww
544:デフォルトの名無しさん
19/12/03 23:42:10.99 3WzRY7Z3.net
経験マウント vs 知識マウント
実に人格障害のC++erらしいスレだ
545:デフォルトの名無しさん
19/12/04 01:05:50 FhHmXOPx.net
知識も経験も豊富な奴おらんのか?
546:デフォルトの名無しさん
19/12/04 01:18:20 MnUOTj8y.net
>>535
多分、C++の仕様が異常なほど膨れ上がってること、JavaScriptやWebGL、
AjaxやC#なども勉強しなくてはならない事が多くなったことなどもあって、
プログラムを沢山しながら仕様にも詳しい人は壊滅状態であることは想像に難くない。
547:デフォルトの名無しさん
19/12/04 01:23:07.75 MnUOTj8y.net
>>536
というか、普通にプログラムしていても、HTML、CSS、HT
548:TP などの仕様はもちろん のこと、Androidやるなら、Java、Kotlin、NDK、iOSやるならSwift、 それに加えて、C#なら、WinFoms、WPFなどもあり、さらに、WSL、 PowerShellにbashやApacheの設定方法、ライセンス各種の勉強などなど、 やることが多くなってきている。本当は、React、Blazor、Vue.js、node.js Electron、flutter、wxWidget、Qt、GTK。別に全部やる必要はないが、 予備知識として知ってないと技術資料も理解しにくいことが多くなってきた。
549:デフォルトの名無しさん
19/12/04 01:25:21.34 FhHmXOPx.net
自分の得意分野以外は浅く予習しておいて使うときになって覚えて使わなくなったら忘れてる
550:デフォルトの名無しさん
19/12/04 01:26:04.91 MnUOTj8y.net
>>537
Python、Rust、Lua、curl、ant、gradle、git、github、wget なども知ってない
と話が理解できないことも多くなっている。
551:デフォルトの名無しさん
19/12/04 01:31:31.51 gHx24DkE.net
今時コードだけでプログラミングするもんでもあるまい
C++使いならフロントはばっさり切り捨ててAWSとGCPにスキルを振ったほうが一貫性があり無駄の少ないスキルセットになる
552:デフォルトの名無しさん
19/12/04 01:36:36 4dvDh/Ut.net
std::cout での出力フォーマット指定に関して教えてください。
cout.flag( ios::uppercase | ios::hex ) やら cout << setfill('0') とか
cout << scientific << setprecision(10) とかとか
大半の指定が 1回 数値 を出力した後も その状態が保持されたままなのに
cout << setw(24) による出力幅指定は その都度指定しないと忘れてしまう挙動になっています。
その都度指定する必要は他にもあるのか。それと、
URLリンク(www.cplusplus.com)
みたいな仕様を見て、どう読み取ればそれが正しい挙動であると分かるのか教えてほしいです。
ある個人ブログには setfill も毎回出力する度に指定する必要があるのだと書かれていましたが、
自分の環境では setfill は状態が保持されました。
553:デフォルトの名無しさん
19/12/04 01:41:33 9acC9vOn.net
フロントエンドは本当に時間の無駄
ましてC++プログラマならほとんど領域が被らないから単なる二足のわらじ状態で非効率なだけ
554:デフォルトの名無しさん
19/12/04 04:32:29 mZNCV5xz.net
>>529
読解力が無いのか>>508と同じく言語オタクだから気づかないのかわからんが
>>508と
>>512-513読み直してくれる?
C++の言語仕様を詳しく解説する本を、コンパイラ”以外の開発に携わってる”人間が書いてくれると
思ってる方がおかしいんだよ
>>508の目には純粋にC++関連の本しか映ってないんだろう
C++を前提としてるがC++そのものでなくその分野の専門的な知識を教えてる技術書がどれだけあると思ってんだ
555:デフォルトの名無しさん
19/12/04 04:32:49 mZNCV5xz.net
>>525
>えっ、ブラック労働環境で疲弊してて書く余裕がないって?w
こんな腐りきった発言する思い上がったゴミアマチュアに教えてやることなど何もない
お前が使ってるその箱で動いてるソフトは誰が書いてくれてると思ってんだ
556:543
19/12/04 06:39:12 mZNCV5xz.net
安価ミス
X >>529
○ >>526
557:デフォルトの名無しさん
19/12/04 07:09:58 Z3kanSY4.net
>>536
うん、想像なら只だもんな
558:デフォルトの名無しさん
19/12/04 07:33:04.63 8KgKER1O.net
そもそも現場の奴らは、現場のやり方しか身につける必要ないだろw
559:デフォルトの名無しさん
19/12/04 07:54:48 Jd4YzzOQ.net
>>545
各分野にコンパイラ開発は入らんのか?
まあお前の好きな分野でいいから具体的な本の名前挙げてくれ
560:デフォルトの名無しさん
19/12/04 08:05:44 mZNCV5xz.net
>>548
挙げたらどうなんの?お前には興味ない内容だと思うけど
「ド素人が言ってんだろ」と思ってるんだろうけど、お前の誤解を晴らすためになんで自分の分野晒さなきゃいけないの?
本の名前挙げたら謝るの?
561:デフォルトの名無しさん
19/12/04 08:06:15 mZNCV5xz.net
>>546
実際そうだと思うよ
>>512にも書いたけど、仕事でやってる人もフリーソフト開発者も
規格読んだことある人なんか皆無だと思うよ
他に勉強しなきゃいけないこと山ほどあるし、仕様(新しいのも含め)は必要なときにググって確認するだけ(>>538も言ってるけど)、むしろそうであるべき
それを「言語についていけない」なんて貶せるやつの神経がわからん
>>519とか、ソフト開発もメタプログラミングも出来ないレベルのド素人だろ?
何調子乗ってんの?自分はついていけてんの?w
開発力も無いし言語を活かせてもないのに、実際にC++を実用してる人を貶すとか
頭おかしい真似してるから言語オタクって言われるんだよ
(C++専門のライターも最近そういう傾向あるけど)
>>547
それはそれでどうかと思うけど