1 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 12:07:15.39 ID:R+oM8cup.net] ※前スレ C++相談室 part154 https://mevius.5ch.net/test/read.cgi/tech/1610096040/ テンプレここまで
135 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 06:24:25.70 ID:ByNsu0yr.net] 質問者ですレスdクス、 >>117 の書き方で>>121 が正しく動いているように見えるのは未定義動作でなくてSTLの仕様ってことでFA? >>126 や>>129 のような巧妙っていやー巧妙だが風が吹いたら桶屋が儲かるみたいなかりにくい仕掛けなのは ステパノフあたりの発案なんですかね……
136 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 10:00:06.97 ID:b/WIqkut.net] >>132 あ、ごめん。比較関数の引数順を交換可能にするのは lower_bound, upper_bound 両用にすることを想定しての話。
137 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 16:09:17.02 ID:uZSkMyuO.net] 生魚にあたって、 入院した病院の天井みながらSTL考えてたもんな
138 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 16:25:55.36 ID:/Z+9yHN3.net] ステパノフ?
139 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 23:02:01.67 ID:6aXKgzGP.net] ニダーランが終了になるそうだ もう糞スレは立てにくくなるな ざまあ
140 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 01:15:08.43 ID:iqXbiQSS.net] >>135 STLなんてかっこつけたネーミングだけど やってることはリニアサーチwww
141 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:44:34.26 ID:B1MFSAev.net] C++11でのstd::swapは、次のようなコードになっているそうですが、 仮に、もし(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに nullptr的なものが代入されるんでしょうか。 仮にt1のポインタ的なメンバにnullptr的なものが代入されない場合、 (2)でt1への代入に置いて何が起きるのか心配です。 質問の仕方を変えるならば、 share_ptrは参照カウンタ方式ですのでカウンタのアップ/ダウンは正確でなければ なりませんが、以下の例では、いったいどの行のどの演算子(またはどの部分)で カウントアップ/カウントダウンされるんでしょうか。 template<typename T> void swap(T& t1, T& t2) { T temp = std::move(t1); // (1), or T temp(std::move(t1)); t1 = std::move(t2); // (2) t2 = std::move(temp); // (3) }
142 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:45:42.89 ID:B1MFSAev.net] >>139 誤:仮に、もし(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに nullptr的なものが代入されるんでしょうか。 正:(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに nullptr的なものが代入されるんでしょうか。
143 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:58:14.49 ID:O38yN+C3.net] >>138 C++03にもstd::binary_searchあるぞ
144 名前:はちみつ餃子 mailto:sage [2021/04/09(金) 12:00:21.75 ID:foJJo5gI.net] >>139 > nullptr的なものが代入されるんでしょうか。 この場合はされる。 ムーブセマンティクス一般においてはムーブ後の抜け殻は「無効なオブジェクト」なのでアクセスに対して保証がないことがあるが、 標準ライブラリのスマートポインタについては所有権を移動させた後にそれが空であり メンバ関数 get で nullptr が返ることも、 nullptr と == で比較して真であることも保証される。 > いったいどの行のどの演算子(またはどの部分)で > カウントアップ/カウントダウンされるんでしょうか。 = がその役割を持っている。 ムーブコンストラクタとムーブ代入演算子によってカウントされる。
145 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:02:12.29 ID:B1MFSAev.net] >>140 どうやら、 (1) の中央の = では、TからTへの move-construc
146 名前:torが呼び出され、 (2)や(3) の中央の = では、TからTへの move-assignment operatorが呼び出される、 ということのようですが、 Tのmove-contructorやmove-assingment operatorは、ユーザーの実装次第で、 ユーザーがそれらを明示的に書かなかった場合の「デフォルトの定義」は 現在もまだ論争中で、標準的な仕様が決まってない、ということらしいですね。 間違っていれば指摘してください。 [] [ここ壊れてます]
147 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:11:46.34 ID:fGHst4+7.net] >>141 そんなのも、ちょっとc\c++をかじったことあるなら 誰でも書けるじゃん わざわざ誰が書いたかわからないようなものより自作できるなら自作するだろ
148 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:20:57.67 ID:QYkH8yRN.net] >>143 以下のサイトによれば、「標準的な仕様は決まっている」ようです: drafet C++11 standareのsection 12.8のparagraph 15に implicitly-defined copy/move constructor は、 「a memberwise copy/move of its bases and members」 であると書いてあるそうですから: https://stackoverflow.com/questions/18290523/is-a-default-move-constructor-equivalent-to-a-member-wise-move-constructor The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move of its bases and members. [ Note: brace-or-equal-initializers of non-static data members are ignored. See also the example in 12.6.2. —end note ] The order of initialization is the same as the order of initialization of bases and members in a user-defined constructor (see 12.6.2). Let x be either the parameter of the constructor or, for the move constructor, an xvalue referring to the parameter. Each base or non-static data member is copied/moved in the manner appropriate to its type: if the member is an array, each element is direct-initialized with the corresponding subobject of x; if a member m has rvalue reference type T&&, it is direct-initialized with static_cast(x.m); otherwise, the base or member is direct-initialized with the corresponding base or member of x. Virtual base class subobjects shall be initialized only once by the implicitly-defined copy/move constructor (see 12.6.2).
149 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:39:59.46 ID:QYkH8yRN.net] >>142 >ムーブセマンティクス一般においてはムーブ後の抜け殻は「無効なオブジェクト」なのでアクセスに対して保証がないことがあるが、 >標準ライブラリのスマートポインタについては所有権を移動させた後にそれが空であり >メンバ関数 get で nullptr が返ることも、 nullptr と == で比較して真であることも保証される。 なるほど。 行(1)の場合、 1. 右辺でstd::move()をt1に行った段階では(実行段階で)マシン語は全く実行されない。 2. 中央の = は、move-constructor と解釈され、Tのmove-constructorが呼び出される。 3. Tの暗黙定義のmove-constructorは、メンバ同士のmove-construcotrなので、 メンバに shared_ptr<A> a があると、shared_ptr<A>のmoveコンストラクタが呼び出される。 そして、shared_ptr<A>のmoveコンストラクタは、実行後に「src側(from側)」をnullptr相当の 状態にしてしまう。 ということのようですね。
150 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:42:08.46 ID:QYkH8yRN.net] >>146 逆に言えば、Tのメンバに、A *pA; のような生ポインタがあると、 Tの暗黙のmoveコンストラクタ/move代入演算子では、恐らく、 「src側(from側)」にはnullptrが代入されない(??)ので、非常に困った 問題を招くかも知れないと?
151 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:44:10.41 ID:QYkH8yRN.net] >>147 Tのデストラクタに if ( pA != nullptr ) { delete pA; } などと書いていた場合、問題を生じそうですね。
152 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:45:44.21 ID:iOouO9yu.net] 生ポ入りクラスに暗黙move関数定義できたっけ?
153 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 18:46:49.83 ID:WYvZUx+H.net] c++についてうんちく垂れるやつに限って仕事ができない そんなうんちくどうでもいいから、さっさと作れよって思われてる先輩いるわ
154 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 19:06:14.56 ID:PF0aPDJN.net] >>150 プログラマは怠惰であれ、を地で行ってるんだろう
155 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 19:55:10.43 ID:O38yN+C3.net] >>144 > わざわざ誰が書いたかわからないようなものより自作できるなら自作するだろ おまえは一生二度とライブラリもOSも使うな ベアメタルだけで食っていけ それができたら、おまえに付いてくる者たちが顕れるだろう できなければ人知れず消えるだけだ どうなりたいかは、お前の人生だ 俺がどうしろとは言えない
156 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 20:38:18.09 ID:8YMfBGcF.net] >>150 またお前か。さっさとプログラミング覚えろよ
157 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 23:03:48.36 ID:mQjFjskh.net] std::binary_search()は戻り値とかなんとboolや こんなのよかちゃんと位置を返してくれるstd::lower_bound()の方がよっぽど使いでがある ちなstd::lower_bound()が2分探索か線形探索かは使うイテレータの条件次第
158 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 23:08:01.53 ID:mQjFjskh.net] std::lower_bound()が線形探索だと断言してくださる香ばしいblogも世の中にはあるが https://rsk0315.hatenablog.com/entry/2019/09/10/173708 これがまつがいであることは比較関数の中でprintf()でもしたらたちどころにワカル
159 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 23:29:26.43 ID:mQjFjskh.net] ゴメソリンク先は必ずしも断言はしていなくって、std::set<T>にstd::lower_bound()を適用する例か、 これのイテレータはrandom-access iteratorでないから確かに線形探索になる
160 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 02:28:09.12 ID:+Yr/nSyJ.net] >>144 こういうのが井の中の蛙ってのだな 蛙くん
161 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 13:02:03.74 ID:62UJIlpX.net] >>149 生ポインタのメンバ変数がある場合で、デストラクタで>>148 のように 書いている場合は、暗黙のmove関数は自動定義されないようです。 なぜなら、暗黙のmove関数は、デストラクタがユーザー定義されている 場合には自動定義されないためです。 他にも、コピーコンストラクタ、コピー代入演算子、move代入演算子 がユーザー定義されている場合も、暗黙のmove関数は自動定義されない そうです。
162 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 13:04:24.60 ID:ziRUnSTY.net] >>158 誤:暗黙のmove関数 正:暗黙のmove-コンストラクタ
163 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 21:20:47.36 ID:aRgjPq06.net] コンパイラはともかくリンカに計算負担をかけるのはバカな設計だなと思うわ。
164 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 21:31:53.64 ID:X3ahc6YE.net] >>160 何の設計の話?
165 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 22:03:18.21 ID:oDlLzjRc.net] 暗黙のmoveがnullptr代入してくれないとか生ポあるクラスに暗黙のctor定義してくれるのか、とか 学ぶ順番間違えて勘違いしてるやつ上の方にいるけど そもそも生ポの扱いに言語が介入するんならdtorでdeleteしてくれるのか、とか考えつかないのかね・・
166 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 22:28:21.28 ID:AbYQFAoI.net] 質問者はポインタ型とshared_ptrについて聞いてたのに、shared_ptrのことしか答えなかった餃子が悪い。 謝れ!俺に
167 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:47:17.66 ID:SAslKmLH.net] 指定ソフトのFWを許可するAPI教えてくださいよ
168 名前:はちみつ餃子 mailto:sage [2021/04/12(月) 15:59:50.47 ID:8pnQviW4.net] そうか。
169 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 18:14:36.03 ID:jbHGiSQO.net] 皆さま御機嫌よう、ちょっと質問させてください class hogeの内部でenum class fugaを定義し、 そのfugaをclass hogehoge でメンバ変数として使用したいのですが、 hogehoge のヘッダーにはなるべくhoge をインクルードさせたくありません。 もちろんfuga変数はヘッダーに置いて使用したいのですが
170 名前:c… 前方宣言でfugaを宣言してもhoge::fugaと互換?が無いため代入が出来ません。 キャストで戻したりして使っているのですがこれならintでもいいかなと…… クラス内クラスの前方宣言は難しいのでしょうか? 何か方法がありましたら教えていただきたく…… class hoge{ enum class fuga{ one,two,three,SUM }; }; //ヘッダーはソースにインクルードしたい class hogehoge{ hoge::fuga mfuga; }; こんかかんじで使いたいのですがエラーになってしまいsまずorz [] [ここ壊れてます]
171 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 18:58:57.80 ID:jbHGiSQO.net] enum classはグローバルに置いた方がいいんでしょうか? 任意のクラス内部で規定したいenumが見た目も便利だと思ったのでなるべく入れ子にしたかったのですが
172 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:30:43.48 ID:e7ZnlCa0.net] >>167 hoge をインクルードしないところで hoge::fuga を使いたいということは fuga は hoge にそれほど強く結びついていないということで、外に出すのが妥当なのでは? 外に置いたうえで hoge 内で using fuga = outer_fuga とでもすれば、見た目は損なわれないだろうし。
173 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:43:07.58 ID:jbHGiSQO.net] >>168 名前に「ホゲで使うフガ」と名付けるのがいいですかね? 前方宣言で定義したクラスは不完全型みたいでクラス内クラスにアクセスする場合は別途定義が必要みたいです…… 難しい感じですかね
174 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:43:19.37 ID:jbHGiSQO.net] ありがとうございました
175 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 19:17:47.93 ID:CekyfU50.net] std::sortがセーフソートかどうかって決まってないんですね?
176 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 19:20:46.00 ID:dUpGrFVX.net] セーフソートとは何なのか、決まってないですね。
177 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 19:49:36.98 ID:3ATJKALM.net] 安定ソートのことならstd::stable_sortを使え
178 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:39:25.63 ID:E/HY6RLS.net] std::stable_sort<T>はどうしてもstd::sort<T>より遅い からstd::stable_sort<T>で安定ソートするテクニックが存在するし需要がある
179 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:57:29.81 ID:E/HY6RLS.net] もちろんタダでというわけにはいかずn個のTのソーティングに対しn個の整数型の配列が別途必要だがとにかくできる
180 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:58:57.72 ID:E/HY6RLS.net] まつがえたorz 誤: std::stable_sort<T> 正: std::sort<T>
181 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:07:31.95 ID:E/HY6RLS.net] 計算量の仕様からすると何だかんだ言って std::stable_sort<T>の中身はマージソートで、 std::sort<T>の中身はイントロソートとクイックセレクトとクイックソートの複合技 ぐらいしかありえない
182 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:10:52.16 ID:CekyfU50.net] みなさんありがとうございます 安定ソートのことでした
183 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 05:40:12.90 ID:OwJGUJdo.net] > std::stable_sort<T>の中身はマージソートで、 これはまあそんなもうだろうけど > std::sort<T>の中身はイントロソートとクイックセレクトとクイックソートの複合技 なんでここまで限定するんだ?
184 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 06:51:50.47 ID:1+2DD+HN.net] https://cpprefjp.github.io/reference/algorithm/sort.html >C++11以降: O(N log N) (N == last - first) 計算量での比較 >クイックソートは平均計算量がO(N Log N)だが、最悪計算量がO(n^2)である。そのため、C++03の計算量要件には合致するが、C++11の要件には合致しない
185 名前:デフォルトの名無しさん [2021/04/14(水) 06:52:54.28 ID:mDTOVFC3.net] ubuntuでの開発環境って何があるんでしょうか? openglなのでc++を使うことになると思うんですが、c++はideとしてvscodeでいいですよね guiは何が一般的なんでしょうか?
186 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:20:31.68 ID:OwJGUJdo.net] > この関数には、特定のアルゴリズムで実装すべきという規定はない
187 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:23:57.67 ID:OwJGUJdo.net] 古典的なソート議論はユニプロセッサ前提 今どきの並列化の流れに必ずしも当てはまるとは思えない
188 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:27:25.07 ID:B6LD9tEC.net] boost::sort
189 名前:::pdqsort(), boost::sort::block_indirect_sort() あたりならヘッダーだけで並列ソートできる [] [ここ壊れてます]
190 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 09:23:48.49 ID:hYFflu6b.net] >>181 GUIなんか使わないのが一般的だよ 開発環境にわざわざC++とLinuxを選ぶような人は自分用アプリにGUIなんて組み込まないだろうし、 他人に使わせるならどうせWindowsでテストしなきゃいけないからLinuxなんて時間の無駄だ OpenGLだったらOpenGLの描画結果を表示するウィンドウとターミナルでいい
191 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 10:52:22.55 ID:OwJGUJdo.net] 自分用アプリねえ 俺の定規ウインドウなんてGUIだけど
192 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 11:09:58.93 ID:lMgtIJ1Q.net] 定規ww
193 名前:デフォルトの名無しさん [2021/04/14(水) 12:59:06.52 ID:mDTOVFC3.net] >>185 qtですか?
194 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 16:06:34.29 ID:qBzPSYhh.net] 定規がとても気になる
195 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 16:25:09.90 ID:qBzPSYhh.net] ぐぐったら沢山出てきた 頭が悪くて理解出来ないけど需要あるんだね
196 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 17:07:15.14 ID:X49CrYgb.net] unique_ptr<hoge> 自体が型名なんでしょうか? class unique_ptr<hoge>で前方宣言してもいいのかな?
197 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:15:29.38 ID:OwJGUJdo.net] 明示的な具現のつもりなら構文が違うね
198 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:22:49.87 ID:X49CrYgb.net] 素人なんで自分の説明が難あると思うんだけど自分なりに精一杯説明すると、 ヘッダー部の引数にclass unique-ptr<hoge>& uhogeを載せて、 ソース部にhoge.hをインクルードして定義する感じでつかいたんだけども…… 試してみたけど動くんだけどなんか怖い 想像ではunique-ptr<class hoge>が前方宣言だと思ってたもので…… どこをどう調べればいいのかだけでも教えていただければ……
199 名前:はちみつ餃子 mailto:sage [2021/04/14(水) 18:34:21.63 ID:VF/LllcQ.net] >>191 テンプレートのインスタンス化は暗黙にやってくれるので基本的にはする必要がない。 どうしても宣言したいのなら extern class unique_ptr<hoge>; と書くことは可能。 ただし、このように宣言した場合には暗黙のインスタンス化は抑制されるので、 別の場所で明示的インスタンス化をしておく必要がある。 テンプレートの展開はその仕組み上、各翻訳単位ごとにやった上でリンク時に統合されるというクソみたいなことになってるので、 コンパイル時間を抑制したいなどの理由でこういった変なことになってる。
200 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:51:48.53 ID:X49CrYgb.net] ユニークポインタ自体の大きさが、ポインタだから4バイトくらいに統一されているのかな? 型テンプレートがどんな型でも、定義部分で明示してあればポインタ長のメモリをアロケートされているから、宣言自体はある程度の許容範囲があるということなのかな? 理解が違ってたらすいません
201 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:01:58.75 ID:IrZTmcl1.net] >>191 1行目yes 2行目はその場合クラステンプレートの明示的実体化になる 前方宣言の場合は template <class T, class D> class unique_ptr; (もちろん名前空間std内 テンプレートは引数与えられてない限りあくまでテンプレートであってコードは生成されないよ >>194 え、明示的インスタンス化しておけばコンパイル時間抑制できるの?
202 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:39:51.01 ID:udtyfuhd.net] 前方宣言というのはあくまで「こういう名前のこういう奴が(どっかに)いますよ」って言ってるだけ 実体がどんなサイズでどんな値やメンバやなんやかんやを持ってるかとかには関知しない
203 名前:はちみつ餃子 mailto:sage [2021/04/14(水) 21:35:38.45 ID:VF/LllcQ.net] >>196 > 明示的インスタンス化しておけばコンパイル時間抑制できるの? ちがうちがう。 extern のほう (宣言) が暗黙のインスタンス化を抑制するからコンパイル時間が短縮されることが期待できる。 でも、インスタンス化を抑制するんだからどこか別の翻訳単位に実体が存在する必要はあって、 それに明示的インスタンス化を使えるようになってるって話。
204 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 22:23:18.21 ID:IrZTmcl1.net] あーなるほどね、thx
205 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 22:43:29.65 ID:B6LD9tEC.net] 今時コンパイル時間を稼ぐとかどうなの
206 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 23:07:25.20 ID:IrZTmcl1.net] リッチにテンプレート使いまくって一本ソフト書いてみ まぁわかりやすいのはspiritとかのET使ったやつ、それを複数のソースファイルで使いまくればわかる さらに言えば自分でそういうライブラリ書いて少しの変更でほぼフルビルドかかるのを体験すればわかるやろ
207 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:02:44.73 ID:5MHywbxF.net] >>200 今時コンパイル時間を気にしないほうが頭悪いわ。
208 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:26:49.07 ID:daBkAWQM.net] いまいちメタプの必要性が理解できん コンパイル時に決定してる値しか計算できないんでしょ 3の階乗は計算できるけど、ユーザーから入力された値の階乗は計算出来ないって・・・ だったらはなから6ってハードコーディングしとけ
209 名前:はちみつ餃子 mailto:sage [2021/04/15(木) 00:38:40.10 ID:FEj8Wx1j.net] >>203 抽象化の手段でもある。 脳内で計算できる程度のものであっても、 ちゃんと名前が付いた関数になってるほうが 読むほうにとってはありがたいもんだよ。
210 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:54:46.36 ID:3EsQmY5s.net] >>203 こういう書き方出来たら便利なのにな、とかを無理矢理実現できるというロマンはある (マクロと似たようなもんだが プロパティみたいなことも一応出来るし ただまぁ・・・労力に見合うか、というと散々だわマジで。 持て囃すようなものでは決してない(他人のふんどしでドヤりたい連中が持て囃してるだけ
211 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:59:45.76 ID:5MHywbxF.net] >>203 まあ実際ビルドシステムを自分で構築するかコンパイラにやらせるかの違いしかない。 フーリエ変換の係数みたいなものを事前に設定するとかは少し便利かもね。 それなりに手計算すると大変だけれどそこまで本格的に計算時間がかからないような 事前計算できて使いまわせるようなものが念頭にあるんだろうが、まあそんなないわな。
212 名前:はちみつ餃子 mailto:sage [2021/04/15(木) 01:11:57.17 ID:FEj8Wx1j.net] 状況に応じてコードジェネレータを用意するよりはマシってくらいか。
213 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 22:12:02.69 ID:mdNAsIkh.net] >>182 具体的に
214 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 05:29:55.48 ID:EjuTOEDD.net] >>208 ?
215 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 06:24:07.51 ID:zpAq69hN.net] >>209 ?!
216 名前:はちみつ餃子 mailto:sage [2021/04/16(金) 12:18:05.12 ID:I3AyWR5p.net] ヴィクトル・ユーゴーかよ。
217 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:00:06.17 ID:1dxAtZcl.net] condition_variableってなんでこんなに面倒なんだ winなら、イベントの方が高速だし楽で懐疑起床も起きないし
218 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:06:00.96 ID:3mxJ/fRx.net] >>212 特定変数に依存しないbool条件式で起床できるのはWindowsのイベントよりも楽で応用が利く 今さらイベントには戻れない便利さがある
219 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:13:31.45 ID:nI8O4VG/.net] >>212 ほんまこれ。せめてspurious無かったらなあ。 めんどいから手っ取り早くspinして待ってまうわ。
220 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:49:19.47 ID:1dxAtZcl.net] >>213 その式を書かなくてもいいイベントを使ってからは condition_variableには戻れなくなった
221 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 10:51:59.94 ID:WHLcQryV.net] おすすめ本ってありますか? C言語のプログラムを、文法などカンニングしながら書けるレベルです。
222 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 13:30:52.06 ID:l53+7OwH.net] cppreference.comの何が不満かによる
223 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 14:51:21.11 ID:ohP60UMx.net] それだけ読んで理解した奴なんておらんやろ。
224 名前:デフォルトの名無しさん [2021/04/17(土) 17:33:14.75 ID:3mxJ/fRx.net] プログラミングにカンニングという概念はない 常にオンラインヘルプなので正確な仕様を確認しながら作業するのがプログラミングの常なので、 カンニング(仕様確認、他人の書いたコードをチラ見してコーディング規約ぶ追従)は仕事の一部
225 名前:デフォルトの名無しさん [2021/04/17(土) 17:41:48.19 ID:3mxJ/fRx.net] 訂正 プログラミングにカンニングという概念はない 常にオンラインヘルプなどで正確な仕様を確認しながら作業するのがプログラミングの常なので、 カンニング(仕様確認、他人の書いたコードをチラ見してコーディング規約に追従)は仕事の一部 明確なコーディング規約がない場合にはなおのこと、カンニングが重要になる
226 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 18:08:39.80 ID:LyWUtAnN.net] RTTIなんかカンニングだろって個人的に思う
227 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 19:10:13.22 ID:3mxJ/fRx.net] condition_variableに似た関数SleepConditionVariableCS()がWin32APIにも用意されてるけど、直感的で使いやすいのはcondition_variableでしょ https://docs.microsoft.com/en-us/windows/win32/sync/using-condition-variables
228 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 10:59:46.23 ID:lylRPiha.net] 質問なのですが教えてくだちい Q1. 64 bit符号付整数の積の結果をオーバーフロー無しで(128 bit等で)で得る方法 ※ 64 bit整数を2^32進数2桁とみなして筆算する処理より速い方法キボン SSE4.1可 Q2. (Q1にうまいやり方が無い場合)64 bit符号付整数の積がオーバーフローしたことを検知する方法 Q3. 多倍長整数(例えば8要素のunsigned longの配列として表された符号無し整数0〜2^256-1) を10で割る方法orz
229 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 11:05:45.65 ID:lylRPiha.net] Q2は現状a*bの前に std::abs(a) <= std::numeric_limit<int64_t>::max / std::abs(b) という判定をやっているのですが もっと速いやつ(除算不要のやつ)キボン、
230 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 13:15:25.56 ID:aOZ5UqSE.net] >>223 参考になるかもしれない https://www.slideshare.net/herumi/webassembly-244797431
231 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 14:35:23.87 ID:HGo0FTuj.net] winならMultiply128、gccやclangなら__int128ってのが使えるみたいだけど
232 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 15:14:50.22 ID:regwJJSX.net] 競技プログラミングではよくある質問
233 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 17:15:30.07 ID:B2k51TVB.net] >>223 特定の環境ならアセンブラでやっちゃえば? ちなみに環境は? 昔その辺の演算は良くやった Q3は10の逆数を求めておいてかけ算命令でやるのが良いけど 多売長は何進数? 10で割るだけの為にバッファスキャンはもったいない 何かの演算とセットに出来ない? もしやりたいことが2進多倍長の10進数化なら もっと良い方法がある
234 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 17:17:36.41 ID:B2k51TVB.net] 環境 (CPU, OS) 多倍長の構成 (整数?指数部あり?2進?10進?変則?) 最終的に何がやりたいか この辺がわかれば色々と教えられる
235 名前: mailto:sage [2021/04/18(日) 17:32:50.11 ID:8N2uJcok.net] >>223 >>225 も多倍長演算ですか、じゃ、私も私の多倍長演算を https://mevius.5ch.net/test/read.cgi/tech/1434079972/37 >Q3. 多倍長整数を10で割る方法 であれば上のリンク先の line:383 から、std::ostream &operator<<(std::ostream &stream, mpz_base_class c) にて、ちょこっと工夫したつもりです、剰余は下位から確定する点では普通、ですので順序を逆にするのはアレかもしれませんが