1 名前:デフォルトの名無しさん [2018/08/27(月) 16:02:00.94 ID:vY3QDx2y0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 https://mevius.5ch.net/test/read.cgi/tech/1531558382/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
474 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 23:35:07.74 ID:VQoTXRx30.net] マイコンベーシックで2進数のドット絵キャラを見たときは笑劇だった
475 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 00:46:24.98 ID:JK7FzOgWM.net] >>461 アポストロフィーがどうにも気持ち悪くて… 慣れるのかね、そのうち
476 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 06:21:32.85 ID:TERwdiOQ0.net] int a = 123; // a = 123 int b = 0123; // b = 83 ほんとクソ仕様だなこれ
477 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 06:35:39.96 ID:Ch2PxBqj0.net] 桁区切りってISOにのっとってるの? 国によって違うけど対応してるの?
478 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 06:35:52.88 ID:NJnAChO90.net] Unix系のファイルパーミッションは今でもしぶとく8進数だよな 大嫌いだからあの習慣早く滅亡して欲しい
479 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 07:40:39.31 ID:R+r0qoR6M.net] >>467 可読性を高めるためのもの コンパイラはただ読み飛ばすだけなのでお好きな記方でどうぞ だったはず
480 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 08:43:28.35 ID:+ao0anr70.net] >>460 unix のファイルパーミッションが3bit単位だから昔のソースではcreat()の引数に0755とか0644とか普通に書かれてる てかそのための8進数だと思う
481 名前:デフォルトの名無しさん [2018/09/16(日) 08:47:08.77 ID:SOVIz+sV0.net] rwxrwxrwx 421421421 8進数なのはアタリマエ 8進数以外で表現しようがない
482 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:04:46.04 ID:J7jkqE/NM.net] intelチップのマシンコードは3bit単位で意味が変わるから ハンドアセンブル出来るひとは普通8進数使えるよ
483 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:08:16.62 ID:NJnAChO90.net] stickyビットとかsetuidビットとか増えてるから本来はもう8進数じゃ足りないんだぞ 未だに引きずられて無理矢理8進数で表現してるのは害悪だから
484 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:14:30.28 ID:lOWFqhA+0.net] >>465 気持ち悪いよな アンダースコアでよかったのに何でって思う
485 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:19:40.62 ID:yGlb1wug0.net] どっかに書いてあった。ユーザー定義リテラルと衝突するんだと。
486 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:20:40.61 ID:AHKBmQkKa.net] ユーザー定義リテラルが先にきてて、アンダースコアだと重複してしまうから。 案としてはアンダースコアも出てたはず。
487 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:24:34.63 ID:AHKBmQkKa.net] これやな。 https://cpprefjp.github.io/lang/cpp14/digit_separators.html
488 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:30:17.66 ID:Z6oeOzwN0.net] 日本の数勘定として、3桁区切りより4桁区切りのほうが良いと思うの。 100,000,000と書いててもぱっと1億って分からん。 1,0000,0000のほうが分かりやすい。 ってC言語関係ないけど。
489 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 09:40:48.27 ID:M63m8fL00.net] >>478 万事、英米基準だから…
490 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 10:16:56.42 ID:lOWFqhA+0.net] operator "" _000 () みたいなアホなこと書かれかねないからか なるほどthx
491 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 11:19:42.15 ID:+ao0anr70.net] >>471 4bit区切りでいいだろ 4bit目は予備として0固定にしちゃえばいいだけ
492 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 11:23:02.16 ID:+ao0anr70.net] >>465 , >>474 https://askul.c.yimg.jp/img/product/3L1/968131_3L1.jpg
493 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 14:03:39.12 ID:cGCWO0MtH.net] >>478 一億ってかけ それ以外は認めん
494 名前:はちみつ餃子 mailto:sage [2018/09/16(日) 14:41:57.29 ID:iD6L9h5X0.net] ユーザー定義リテラルで 1_億 みたいには書けるじゃろ
495 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 14:43:54.49 ID:lOWFqhA+
] [ここ壊れてます]
496 名前:0.net mailto: constexpr unsigned long long operator "" _\u5104 (unsigned long long val) { return val * 10000 * 10000; } [] [ここ壊れてます]
497 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 14:58:07.76 ID:lOWFqhA+0.net] // Header <japanese> synopsis constexpr unsigned long long operator "" _\u4e07 (unsigned long long); constexpr unsigned long long operator "" _\u5104 (unsigned long long); constexpr unsigned long long operator "" _\u5146 (unsigned long long); constexpr unsigned long long operator "" _\u4eac (unsigned long long); constexpr unsigned long long operator "" _\u5793 (unsigned long long); constexpr unsigned long long operator "" _\u25771 (unsigned long long); constexpr unsigned long long operator "" _\u7a63 (unsigned long long); constexpr unsigned long long operator "" _\u6e90 (unsigned long long); constexpr unsigned long long operator "" _\u6f97 (unsigned long long); constexpr unsigned long long operator "" _\u6b63 (unsigned long long); constexpr unsigned long long operator "" _\u8f09 (unsigned long long); constexpr unsigned long long operator "" _\u6975 (unsigned long long); constexpr unsigned long long operator "" _\u6052\u6cb3\u6c99 (unsigned long long); constexpr unsigned long long operator "" _\u963f\u50e7\u7947 (unsigned long long); constexpr unsigned long long operator "" _\u90a3\u7531\u4ed6 (unsigned long long); constexpr unsigned long long operator "" _\u4e0d\u53ef\u601d\u8b70 (unsigned long long); constexpr unsigned long long operator "" _\u7121\u91cf\u5927\u6570 (unsigned long long);
498 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 15:01:20.18 ID:AX2qPX270.net] mjk
499 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 15:13:55.06 ID:NJnAChO90.net] まあ64bit整数は垓でオーバーフローしちゃうけどな
500 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 15:19:22.27 ID:un+A0LAL0.net] アンダーバー必須?
501 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 15:23:34.17 ID:PDH9z/EW0.net] 予約語なのでユーザー定義リテラルをユーザー定義するときはないとダメ
502 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 20:49:23.78 ID:ecoXNuEUM.net] >>482 あー、既視感はこれか…
503 名前:デフォルトの名無しさん [2018/09/16(日) 21:37:31.50 ID:Lm7yQOTf0.net] 全然関係ない話だが めんどくさいC,C++を習得すると 他言語学習が簡単に進む
504 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 21:46:28.57 ID:h2MQFGAYM.net] >>492 つ VLIW
505 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 23:31:10.84 ID:V0g35lEl0.net] 他言語すべてがザコに見える 特にJAVA
506 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 00:00:35.54 ID:x38HLuISM.net] 多言語使いは問題解決能力が無いのに偉そう 特にJava
507 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 07:23:44.67 ID:EVO8AkN40.net] ところで、C++ってどんな開発に使ってるの? Linuxのアプリ以外で。
508 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 07:48:33.15 ID:oxQatDsR0.net] https://github.com/satori16/PulseGeneratorForWindows こんな感じの物が作れるようになった。win32apiだ。 コアはそれなりにできたが、UI作ろうとしたらバグで死亡ちゅう。テストは良いけど過信しないで。 VBとかC#のビジュアル開発がどれだけ楽か身に染みてきた。 ところで、[0,1]の引数のみで使える面白関数しらないかい? logとかは線形な気がするのでもっとおかしな奴ないかい?
509 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 09:36:25.88 ID:dZ3SMulNa.net] edcb
510 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 13:09:26.75 ID:9OAi7Hbk0.net] >>496 アルゴリズムベンチマーク。 リークしててもそこまで問題にならんし、速度が実際どれくらい出るもんか調べるには良い。 まあcでも良さげな使い方ばっかだけど、namespaceとか多少ね。
511 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 14:24:16.64 ID:zCVYDMXL0.net] >>496 速度が求められるアプリはC++でしょ 大規模データでシミュレーションとかJavaでは遅くて無理
512 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 14:39:27.45 ID:r6sTx27/r.net] リークしてても? リークしてても……?
513 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 14:44:25.11 ID:zCVYDMXL0.net] >>501 そうだなw 盛大にリークしてたら速度にめちゃ影響するわな
514 名前:はちみつ餃子 mailto:sage [2018/09/17(月) 15:02:34.85 ID:O6rb8eh90.net] ものすごい潤沢にメモリがあって処理が終わるまでに使い切ることがないという確信があれば メモリを解放する処理を入れずに速度を優先することは無いわけではないと思うが、 それが妥当かどうかいちいち検討するコストをかけるくらいならちゃんと解放しておいた方がよろしい。
515 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 15:32:46.89 ID:t936AOdi0.net] なんで速度を要する処理の途中でメモリを獲得するん? なんで速度を要する処理の途中でメモリを獲得するん? 👀 Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
516 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 16:08:31.17 ID:0/ju7MLa0.net] >>503 「ものすごい潤沢」では意味がない 処理が終わるまでに最悪何バイト使う可能性があり、 実装されているメモリは何バイトなのか、 需要と供給の具体的な比較あるのみ
517 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 16:22:22.61 ID:kSBsQrFK0.net] サーバープログラムみたいなもんだったら リークしてたらどこでシステム停止するかわからんし大問題に繋がるだろうが、 てきとうなベンチマーク検証ならリークしようと最悪落ちようとそこまで支障をきたすわけじゃ無いってことだよ。 てか実際問題そのくらい実験的な意味合いの強いものじゃ無いとc++は苦しい気がするんだが。
518 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 17:13:04.47 ID:EVO8AkN40.net] C++の生産効率、バク埋め込み率、デバックのしにくさを考えると、積極的にC++を採用すべき分野って限られてくるよね。 組み込みやドライバではCが主流だし、WindowsやスマホではほぼC++は使われないし、Webの世界ではスクリプト言語だし、計算分野ではPythonやMatlabやMathmaticaだし。 仕事でC++使う機会は最近めっきり減ったわ。
519 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 17:37:23.45 ID:3kd9gc670.net] スマポとSTL使ってればリークなんかそうそう起こらんだろ 古臭いC++のイメージで語らないほうが良いよ爺さま方
520 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 17:41:18.57 ID:qtGPC3c90.net] スマポと言っても一秒間に数千回数万回の確保とかしてたら流石に遅くなるんじゃね?
521 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 17:53:56.99 ID:3kd9gc670.net] unique_ptrはナマポ使ってるのと一緒よ
522 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 17:55:45.86 ID:SBpxj18K0.net] >>509 そんな機会はめったにないし、万が一あったらそこだけナマポとかで対処できるのはC++だけ
523 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 18:07:37.03 ID:r6sTx27/r.net] >>502 いや、どんな場合でもリークしないように書けよと思って引っかかった
524 名前:デフォルトの名無しさん [2018/09/17(月) 18:19:02.17 ID:GutZ/6rY0.net] まあ趣味でない限り実用度が学習コストに見合わない感じはあるな 他に比べて
525 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 18:20:26.64 ID:zCVYDMXL0.net] オブジェクトを1個1個newする? でかいデータだと大量にnewするオブジェクトだったら配列で1MBとかまとめてnewしないと遅いでしょ
526 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 18:42:32.24 ID:CEV1V8yd0.net] メモリ解放にも時間かかるけどそこは計測から外します 都合のいい計測をします
527 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 19:57:02.88 ID:HG71i9DfM.net] >>508 それで安全になるかもしれないけど コピーしまくり、newしまくりだったりとかよくあること C++使う理由をよく考えたほうがいいと思うわ
528 名前:はちみつ餃子 mailto:sage [2018/09/17(月) 20:37:10.33 ID:O6rb8eh90.net] >>516 ムーブの恩恵があるやで。
529 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 20:53:22.59 ID:tpLtH4DE0.net] 現代の C++ は処理系もライブラリもそれなりに賢いから、任せきりにしてもそれなりの効率になる。 ほとんど任せきりにできる高級言語としての面と、必要なとこは手動で書ける低級言語としての面を合わせ持つのが C++ の強み。
530 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 21:33:50.41 ID:YgnM5prK0.net] >>512 お前は最低でも数万行くらいの規模のコード書いてから偉そうなことを言え
531 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 21:40:52.08 ID:5VGXhp/T0.net] 最近はC++もスマートポインタが主流で メモリリークもツールでチェックすると聞いたが 現実はどんなもんなん
532 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 22:10:33.50 ID:oxQatDsR0.net] VCには簡易メモリっチェックをするヘッダーがある。もちろん環境依存。 スマポでリークするのはかなり筋が悪い。
533 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 22:19:24.01 ID:CEV1V8yd0.net] >>519 それはリークの言い訳にはならんで
534 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 22:33:55.31 ID:SBpxj18K0.net] >>519 まあどんな場合でもは言いすぎだと思うが少なくとも正常系ではリークなしを目指すのは当たり前
535 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 22:36:30.00 ID:oxQatDsR0.net] スマポでリークするケースというと、昔のインターフェースでスマポそのものが渡せないとかかなぁ。。。 希望としてはリファクタリングしてほしいところだけどね。
536 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 23:14:55.87 ID:YgnM5prK0.net] >>522 誰が「規模が大きければリークしていい」と言った? 言ってないことを言ったかのように相手の主張を捻じ曲げるな >>523 >アルゴリズムベンチマーク。 >リークしててもそこまで問題にならんし
537 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 23:17:40.96 ID:2pCWAXV50.net] リークしたらヒープエリア毎Destroyすれば良いじゃない @マリー・アンチョワネット
538 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 23:28:41.66 ID:YgnM5prK0.net] あぁすまん、正常系について誤解してた まぁ個人で使うレベルなんじゃないかね、本人が問題にならん言うてるし
539 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 00:08:27.62 ID:z2qcvEfV0.net] ウィンドーズにはApplication Verifierがあります!!11!1! >>521 malloc()とfree()が対応しているかはばっちりワカルのでかなり役に立つが Win32APIで直接メモリ確保したりC++でメモリアロケータを0から自作した場合はどうなるかわからん… perfmonで指定プロセスのprivate bytesの推移を取得しつつ長時間動かして直接消費状況を確認するというのがある意味最終手段だが リークが無い(はずの)プログラムでもなかなか安定しないという印象 多分ユーザーコードからRAIIを排除しても拾ってきたライブラリがRAIIするとかそんな感じ!
540 名前: mailto:sage [2018/09/18(火) 00:14:49.89 ID:Iw2LHuqq0.net] >>528 グローバル new 演算子 グローバル delete 演算子 を malloc()/free() を使って定義して、かつ、未解放・二重解放を検出するようにポインタを線形リストに格納してチェックする、ということなら、簡単にできます win32api でも、たとえば heapalloc() をラップすればいいかと デバッグ初期の単純なミスならこれで大方弾けます
541 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 00:18:57.80 ID:k3MAuD5K0.net] >>528 MS製だからWIN32位は拾ってくれると思ってたけど、なんだってー。Orz 俺は末端のユーザだからアロケータ書いたりしないのよね。 特に自作したらメンテとか自分でやんなきゃいけない負債になるのでやりたくないなぁ。
542 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 01:01:35.82 ID:uOah9zOu0.net] >>530 application verifierはwin32apiをhookしてるよ。
543 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 01:07:33.27 ID:7OxZ5HAL0.net] >>517 コンテナ形式のデータばかりと思うなよ
544 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 01:31:03.51 ID:n7K73R0GM.net] hogeはdouble型で int temp = int(hoge); if (temp > 0) return temp; else return 0; このような処理をしたいのですが、何か良さげな内部関数とかないですかね
545 名前:はちみつ餃子 mailto:sage [2018/09/18(火) 04:24:56.90 ID:CgLDhfQ00.net] >>533 C++17 の std::clamp みたいなことがしたいのかな
546 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 04:58:47.12 ID:1zYpCWJ70.net] >>529 ランタイムのソース読んだ事無いの?
547 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 05:16:37.52 ID:bwjvKD0M0.net] >>533 std::max(0, int(hoge))とか
548 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 06:06:39.75 ID:mbB60zCK0.net] >>533 _mm_max_pd とかその辺
549 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 06:32:00.57 ID:yg1A1NBg0.net] >>525 それはリークの言い訳にはならんで
550 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 06:35:34.10 ID:BuheiE4nM.net] アルゴリズムベンチマークなんて長期間稼働するものでもないし、プロセス終わればリークも終わる。
551 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 06:55:51.70 ID:1W/tmI+p0.net] >>533 の言う「内部関数」ってのは、 CPUのマシン語命令を直接利用するビルトイン関数みたいな感じかな。
552 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:38:53.59 ID:GYwTywmv0.net] 言い訳にならんよな 数万行って具体的な数値を出してきたのは奴だし
553 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:39:49.43 ID:Zf2s67R20.net] 勝手に察すると、単純な話だと思う 彼の把握では、おそらくは次のようになっているハズだ 内部関数=組み込み関数(あらかじめ用意されている標準の関数) 外部関数=自作関数、ユーザ定義関数 真意を勝手に忖度すると、「自作関数を作らずにそのまま使えるような便利な関数は既に存在してはいないだろうか」という質問に見える
554 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:40:00.14 ID:GYwTywmv0.net] そもそも行数でどうたらって、いつの時代劇だよ
555 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:40:52.00 ID:GYwTywmv0.net] >>542 俺もそう思った だとすると536でFA
556 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:49:04.25 ID:k3MAuD5K0.net] >>531 Yes、OK!
557 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:55:26.47 ID:k3MAuD5K0.net] int ookii=... int tiisai=... int V=... int x = std::max(tiisai,std::min(ookii,V)); ってやると、[min,max]区間内のVが取れたような気がする。 今度C++17で入るクランプがそれ。
558 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 11:57:01.55 ID:9q1AFd5B0.net] >>543 >>512 の >どんな場合でもリークしないように書けよ リークしないようなコードを書くのは当たり前だが、どんなに注意してても起きるときは起きる 仮にこういう主張してるやつが居てもお前は俺と同じことを思わんのか? 「どんな場合でもバグらないように書けよ」
559 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 12:26:58.02 ID:GYwTywmv0.net] 車の事故と同じ 起きるときは起きるなんて言い訳は通用しない まず起こすな やっちまったら責任とれ そういう緊張感がいるってことだ
560 名前:533 mailto:sage [2018/09/18(火) 12:44:39.79 ID:TXDNyaJKM.net] ありがとうございます max関数使わせていただきます もう一つ別の質問なのですが、 2つのベクターの要素(1000個程度)の比較で、同じi番目の要素の内容差が10以上の要素番号(イテレータ?)を調べたいです この操作は何回も繰り返すので出来るだけ高速化したいのですがなにか良い方法ありませんかね? ベクターの要素はint型で内容は大体1000以下の整数です vec1[100] = 100とvec2[100] = 300 vec1[102] = 100とvec2[122] = 300 なら100, 102のイテレータ(この後そのまま新しくforに投げるので)
561 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 13:14:20.96 ID:l12yg0eyx.net] >>549 思わずC# LINQかPython使いたくなる内容だな。 やりたいことは結局のところ行列演算なのでEigen使うと何か方法ありそうだけど、高速化に寄与するかは不明。
562 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 14:20:03.27 ID:Gab8FMClM.net] >>549 1000個を例えば4コアで250個ずつ並列化してさらにforの中でn個ずつ比較するとかかな… intelは _mm_cmpgt_epi16 armは vcgt_s16 とかあるみたいだけど
563 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 15:33:22.77 ID:UQgXz1AkM.net] 普通MPIじゃね?
564 名前:はちみつ餃子 mailto:sage [2018/09/18(火) 16:41:03.37 ID:CgLDhfQ00.net] >>549 新しく for に投げるっていうのがよくわからんのだが、 やりたいことをコードで (C++17 で導入された構造化束縛を使って) 表すと for (const int& [element1, element2]: extract_if_big_difference(vec1, vec2)) { ほにゃらら } みたいに書ける関数 extract_if_big_difference が定義できるといいなぁという感じ? こうだとしたら、並列化するのは難しい気がするぞ。
565 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 16:42:40.86 ID:l12yg0eyx.net] OpenCLでベクトル演算すれば速いんじゃね?
566 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 16:58:21.90 ID:Zf2s67R20.net] こんなのだと速そうな気がする vec3 = vec1 - vec2; filter(vec3, 10, index); void filter(const vector vec3, const int limit, int index[]){ int j=0; for(int i=0; i<vec3.size(); i++){ if(vec3[i] >= limit){ index[j++] = i; }else if(vec3[i] <= -limit){ index[j++] = i; } } index[j] = -1; return; }
567 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 17:05:52.46 ID:ZX8OqlLQd.net] データが多いならざっくり N (2〜8)分割して OpenMP とかで並列処理するのがいいよ 数百ミリ秒以上かかるなら他のコアを遊ばせておくのはもったいない 各分割の結果は独立して保持して後で統合する
568 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 17:06:36.21 ID:GYwTywmv0.net] >>549 vectorじゃなくvalarrayだが。。。 int main() { int const n = 10; //おまえさんのリクは 1000 だったな //このへん前置きは置いといて mt19937 eng; random_device dev; eng.seed(dev()); uniform_int_distribution<int> dis(-20, 20); auto rnd = [&eng, &dis]() { return dis(eng); }; auto print = [](auto& ct) { for(auto& x : ct) cout << x << '\t'; cout << endl; }; valarray<int> vec1(n); generate(begin(vec1), end(vec1), rnd); print(vec1); valarray<int> vec2(n); generate(begin(vec2), end(vec2), rnd); print(vec2); cout << endl; //ここが本題 valarray<bool> mask = abs(vec1 - vec2) >= 10; vec1[!mask] = 0; vec2[!mask] = 0; print(vec1); print(vec2); } 差が10以上のところを探して何か処理ならこっちのが楽だべ
569 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 18:11:51.89 ID:H2d9f0sTa.net] >>533 の質問のレベルを見ていると、 >>549 も「実装完了しないうちから最適化必要と思ってたけど実はそんなこと必要なかった」なんて落ちにはならないかなとふと思った。
570 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 18:32:34.48 ID:RR2nvfojr.net] boost の multi_array ってさ、添字の入れ替えってできる? 例えば要素 a[i][j][k] を a[k][i][j] に、全ての i, j, k について入れ替える操作 自分で実装しなきゃ駄目?
571 名前:デフォルトの名無しさん [2018/09/18(火) 23:03:47.37 ID:oE0uJFU60.net] boostみたいなインチキくさいライブラリは使ったことないが オレだったらイチイチそんなムダな入れ替えが本当に必要なのかと まずそこを疑う
572 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:14:12.21 ID:yg1A1NBg0.net] 行列でそんな演算あったような
573 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:30:40.91 ID:GKhblNvIr.net] >>560 無駄の意味が分からない テンソルの掛け算するときに行列積ライブラリ使うために足組み替えたりするだろ
574 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:35:47.30 ID:Re9liTgW0.net] できた! template<typename T> class MyMatrix3D : Matrix3D { ... virtual T get(size_t i, size_t j, size_t k) { return get(k, i, j); } ... };