1 名前:デフォルトの名無しさん [2017/11/04(土) 16:33:35.07 ID:NYxCuvMY.net] エスケープシーケンスやWin32APIなどの環境依存なものもOK そのような質問は必ず環境を書きましょう 半角空白やタブでのインデントはスレに貼ると無くなります コードを貼れる所 codepad.org/ https://ideone.com/ 前スレ 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1500329247/
855 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 16:50:15.52 ID:9mmiVsnm.net] 十分かどうかは時と場合による
856 名前:放置された蟻人間 mailto:sage [2018/06/11(月) 16:51:12.74 ID:7op9QnGW.net] 画像ファイルには、過去にいくつか脆弱性が確認されている。使用において、脆弱性の存在が致命的ならば、きちんとチェックすべきだし、 処理スピードを優先するなら、memcmpで十分。
857 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 17:03:57.96 ID:SE5SjeC/.net] すいません、十分というのは、ファイルの破損や脆弱性関連は置いておいて、 他の形式の正常なファイルも拾ってしまわないかということです。 JPEGの場合、先頭の3バイトを判定すれば、他の正常なファイルが引っかかることはないのでしょうか。
858 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 17:06:17.81 ID:3AghcpDH.net] 中身見ないなら、拡張子でもできそうだが
859 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 17:12:32.50 ID:oqoWhxjw.net] 3バイトをランダムなデータと比較する場合、1/16777216の確率で誤認する ファイルを最後までパースして、JPEGデータとして読み込めるかどうかチェックするのが確実だが
860 名前:はちみつ餃子 mailto:sage [2018/06/11(月) 17:40:03.88 ID:CXPnR3I1.net] >>841 POSIX には file コマンドがあってファイルの種類を判定できるけど、その実装はヒューリスティックだよ。 参考になるとは思うから読んでみるのもいいんじゃない? ライセンス的に OK ならそのまま流用してもいいかも。 どの程度の精度で判定すべきかは状況によるので総合的に考えてとしか言えない。 例えば、 jpg ではないファイルが多数ある中から jpg を探すというような状況だったら、 先頭をちょっとだけ読んで jpg っぽかったら全部を読んで詳細に判定するというのでもいい。 ほとんどが jpg なのだったら、いちいち詳細に判定するのは速度的に遅くなるけど、それが許容できるのか、 許容できないのであればどの程度まで緩い判定にしていいのか、バランスの問題。
861 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 12:54:07.45 ID:xDeIiE2o.net] なぜ多数から探すかどうかで判定方法が変わるのか
862 名前:はちみつ餃子 mailto:sage [2018/06/12(火) 13:09:55.18 ID:U9ShKAeR.net] >>845 速度とかとのバランスだって書いてあるつもりだけど、わかり難かった?
863 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 13:15:57.78 ID:BvPEMwcC.net] 明らかに一致しない時は瞬時に判断出来る ヘッダですぐにわかるので jpgではあるんだけど 非対応フォーマットとか一部化けてて表示出来ないとか そういう判断が難しい
864 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 13:34:24.68 ID:BvPEMwcC.net] はちみつはJPGを扱ったことが無いってのがよく分かる
865 名前:はちみつ餃子 mailto:sage [2018/06/12(火) 14:45:14.29 ID:U9ShKAeR.net] >>847 えっ? だからまずは先頭をちょっとだけ読んでみる (この判定だと false positive はあっても false negative はない) という話なんだけど。
866 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 16:23:32.57 ID:LTqXdgcV.net] 元の >>838 の質問に戻れば「どんなファイル群を扱うのかによる」としか 言いようがないんじゃないか? 極端な話、行儀の良いファイルだけなら拡張子で判定しても大丈夫。 (拡張子が間違ってるけど)一般的なファイルばかりなら先頭の何バイトかで判定。 悪意を持って偽装ヘッダや追加情報エリアまで利用してる可能性を気にすれば JPEGの規格に準拠してるファイルでさえ危険、というレベルまであるかも。
867 名前:はちみつ餃子 mailto:sage [2018/06/12(火) 16:44:07.95 ID:U9ShKAeR.net] ある程度は信じて割り切るしかしょうがない。
868 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 17:43:08.97 ID:RH6dhGDk.net] JFIF以下のJPEG出す機材って監視カメラ以外見たことないなぁ 実運用上はJFIFとEXIF以外は対象外でも良いのかも
869 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 17:56:59.93 .net] ポインタでないなら、継承した関数を呼び出すときに、仮想テーブル参照による動的オーバーヘッドはないのですよね?
870 名前:はちみつ餃子 mailto:sage [2018/06/12(火) 18:20:08.25 ID:U9ShKAeR.net] >>853 Yes それが仮想関数であろうとも、 オブジェクトへのアクセスがポインタ経由でないならば どの関数を呼び出すのかコンパイル時に確定可能なので、 仮想関数テーブルにアクセスする必要はない。 (はずだと思うが言語仕様での保証はないだろうし、 実態がどうなってるか確かめたことはないんで、 誰かやってみてくれんかな。)
871 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 18:35:01.32 ID:Q/HiJGFf.net] >>849 ファイル判別の一般論じゃなくてjpgの判別ですよ jpgの判別方法を語ればいいんです 文字コードと違ってあやしいとかはなくて APPnの中数バイト見れば簡単にわかるんですよ 文字でJFIFとかExifとか書いてあるわけなんで 偽装が無いならこれで十分 あとは 対応フォーマットであるのか 正しいフォーマットであるのか 実際にデコード出来るのかどうか などを判別する必要があるかどうかでその先が決まる
872 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 18:43:20.13 ID:RH6dhGDk.net] >>855 baka?
873 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 18:57:45.80 .net] >>854 ありがとうございます
874 名前:はちみつ餃子 mailto:sage [2018/06/12(火) 20:19:36.50 ID:U9ShKAeR.net] >>855 何言ってんの? その偽装があるかもしれん (ということも想定に入れるかどうは場合による) という話なんだけど。
875 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 00:32:03.88 ID:21BMiWPP.net] >>841 を読んでの発言? 日本語が読めないの?
876 名前:はちみつ餃子 mailto:sage [2018/06/13(水) 01:55:04.01 ID:3eXA0K0W.net] >>859 なるほど、偽装に騙されるのは脆弱性の内 (で、それはないという前提が提示された) という解釈? 判定を誤りうる (データを作れる) のとセキュリティ的な欠陥をなんとなく区別してたけど、 質問者の感じからすると、確かに偽装で騙されるのは脆弱性の内かな。
877 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 01:56:34.26 ID:l7UBIPff.net] >>855 JPEGの規格書を読んだ事が無いだろう
878 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 07:50:57.05 ID:vaxyQxvX.net] 昔ゲーム機のハックで偽装した画像ファイルを読み込ませるってのがあったような気がする。
879 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 08:14:06.81 ID:7lldK1Da.net] >>838 >>841 を合わせた質問の意図からすると、 JPEG以外で先頭3byteが {0xFF, 0xD8, 0xFF} のファイル形式が存在するか、 普通に出回ってるか? という問題じゃないのかな。
880 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 09:42:34.58 ID:V88S+L9t.net] ゲロトラップとして普通に出回ってないかね?
881 名前:デフォルトの名無しさん [2018/06/13(水) 09:46:09.42 ID:Lf/dU7gs.net] テンポラリオブジェクトについて質問です。 ロベールの本ですが、 「 Hoge Two() { Hoge n(2); return n; } int main() { Hoge hoge(1); hoge = Two(); とした場合、基本的には n のコピーがいったん作られて、それが hoge に 代入される形になります。このコピーこそが、テンポラリオブジェクトになる わけです。 」 と書かれていますが、なぜわざわざ n のコピーを作るのでしょうか? n は Two() 関数を抜けたら消えてしまいますが、これを消さずに、 返した方が効率的な気がします。
882 名前:デフォルトの名無しさん [2018/06/13(水) 10:17:19.41 ID:Lf/dU7gs.net] ・テンポラリオブジェクト = n のコピー ・代入により、 hoge に テンポラリオブジェクトがコピーされる。 これはなんか非常に無駄なことをやっているように思ってしまいます。 hoge に 捨てずにとっておいた n を参照させれば十分のように思います。
883 名前:838 mailto:sage [2018/06/13(水) 10:17:36.81 ID:818/kKId.net] みなさんありがとうございます。 話が難しい方向に進んでしまってすいません。 勉強させていただきます。 元々の疑問は>>863 の言われるとおりで、 他の形式の画像をJPEGだと誤判定してしまわないか、 さらに言うと、先頭が{0xFF, 0xD8, 0xFF}以外のJPEGファイルも存在していて、 JPEGファイルを見逃してしまうことがあるのか、ということでした。
884 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 14:58:14.75 ID:54SDWBzN.net] >>865-866 そういう時こそ右辺値参照ですよ hoge = std::move(Two()); でもこんな事をしなくても大抵戻り値最適化(RVOやNRVO)でコピーコンストラクタは呼び出されない 明示的にムーブコンストラクタを無効にするとコンパイルエラーが発生するはず Hoge(Hoge&&) = delete;
885 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 14:59:33.86 ID:54SDWBzN.net] そしてこの場合代入演算子をオーバーロードしてやるとそちらが使われる Hoge& operator=(const Hoge& hoge) { std::cout << "assign operator called." << std::endl; return *this; }
886 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 20:08:20.11 ID:VLQaO2hj.net] (最適化をおいとくと)値渡し/値返しってそういうもんじゃん Two()内の変数nは自動変数だからスタックに作られる とっとけないじゃん
887 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 21:00:21.79 ID:qH/FTczC.net] まあ2回コピーされるのを1回に抑えるための最適化でしょう
888 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 21:08:53.19 ID:buJbRccy.net] 確実なのは戻り値じゃなくて参照、もしくはポインタにすること
889 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 21:40:28.10 ID:GheUJm4W.net] >>872 それヤバくね?関数を抜けた途端消える存在を参照するとか
890 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 22:09:20.49 ID:1EWuco5t.net] 呼び出し元から参照を渡してそこに返してもらえってことじゃなくて?
891 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 22:13:11.63 ID:21BMiWPP.net] もちろんそう 昔ながらの方法
892 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 23:23:40.79 ID:MDGDBDRC.net] -Wreturn-local-addr みたいなwarningじゃなくて規格でエラーにすれば873みたいな勘違いは無くなるのにな
893 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 10:53:47.52 ID:BKSAN5oR.net] 普段c#使っているのですが、c++/cliでデータベース絡みのdllを作ってて、わからないことがあります。 SqlConnectionやDataSetのDispose()がインテリセンスでは候補に上がるのに、コンパイルで「メンバーではありません」とエラーになります。 スコープを抜けると破棄されるので何もしなくてよいという認識でよいのでしょうか? また、この理屈で、c#の勝手に破棄してくれるusing相当の機能はない、と言うか、必要ないのでしょうか?
894 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 14:30:10.48 ID:Lgo9GPo1.net] >>877 IDisposable使ってる? スコープ抜けてもGCによって回収されるタイミングは保証できない どうしてもすぐにGCしたいなら GC.Collect(); をする。 多分ジェネレーション0だろうから GC.Collect(0); でいいのでは
895 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 15:24:59.55 ID:BKSAN5oR.net] >>878 レスをござます。 作ってるクラスがIDisposableを継承しないとダメってことですか? 作ってるのはインスタンス作らなくてもいいstaticクラスなんですけど。 GCは効果の程を確認できないですが、やってみます。
896 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 15:25:54.47 ID:BKSAN5oR.net] >>879 レスありがとうございます。です。
897 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 16:42:09.02 ID:79UoYXtL.net] >>879 https://qiita.com/haniwo820/items/ba0ab725c25673c20338 こんなのとか staticクラスだとファイナライザーを書けないから内部で他のクラスをnewした場合が問題 それとメンバ変数もstaticでなければならない となると普通はアプリケーションが破棄されるまで残る IDisposableをstaticクラスが継承するとエラーになる というかstaticクラスはインターフェイスを継承できない むしろusingを使えない理由が分からない ufcpp.net/study/csharp/oo_dispose.html こういうのだとstaticクラス風にファイナライザーを走らせられる それかStreamみたいのでClose()したいのならClose()メソッドを書けばいい SqlConnectionやDataSetはいちいちClose()する必要があるのかな?
898 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 22:51:20.07 ID:khTKmU6v.net] >>877 ここの記述を信じるなら、全部Yesってことになるのかな。 mag.autumn.org/Content.modf?id=20050506023118
899 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 09:10:59.15 ID:8YDR1CpT.net] >>879 です。 VS2013 c++のCLRコンソールアプリを新規作成したやつです。 include "stdafx.h" using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); String ^constr = "xxxxx"; SqlConnection ^connection = gcnew SqlConnection(constr); connection->Open(); connection->Close(); connection->Dispose(); return 0; } この Disposeでエラーになります。 ここには書いてませんがDataSetも Disposeでエラーになります。 上記コードの場合 Dispose抜きで問題ないのでしょうか? >>882 まさにこれを読みました。c#のusingがc++にはない認識です。 この理由がこの通りならDisposeなしで心配ないのですが。
900 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 10:38:59.49 ID:uIGrLsPa.net] 共同ツール 1 https://seleck.cc/685 https://trello.com/ ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど Trello Chrome拡張機能 elegant ttp://www.kikakulabo.com/service-eft/ trelloのオープンソースあり 共同ツール 2 https://www.google.com/intl/ja_jp/sheets/about/ 共同ツール 3 https://slack.com/intl/ja-jp https://www.dropbox.com/ja/ https://bitbucket.org/ https://ja.atlassian.com/software/sourcetree https://www.sketchapp.com/ ttp://photoshopvip.net/103903 ttps://goodpatch.com/blog/sketch-plugins/ Trello Chrome拡張機能プラグイン集 https://chrome.google.com/webstore/search/trello?_category=extensions Slackプラグイン集 https://slack.com/apps Sketchプラグイン集 https://sketchapp.com/extensions/plugins/ https://supernova.studio/
901 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 19:01:40.09 ID:J8URhrRM.net] >>882 によると、自動でDisposeさせたい場合は以下のようにする、 と書いてあるように見える。(手元に環境がないので未確認) SqlConnection connection(constr); connection.Open(); connection.Close();
902 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 06:42:53.11 ID:PCTFj+qN.net] >>883 そのコードでconnection->Dispose();を消すだけだとDisposeは呼ばれない。 C++/CLIでDisposeを呼びたい場合「delete connection;」と書く。 C#のusing相当のことをしたい場合は>>885 詳細は↓を参照。 https://loafer.jp/mixi/diary/class.xsp?2007-09-07-23-55
903 名前:デフォルトの名無しさん mailto:sage [2018/06/18(月) 12:02:02.44 ID:P1toAgew.net] Dispose の件で質問してた者です。 自作のIDisposableを継承したクラスを作って確認したところ delete で Disposeが通る事を確認できました。 不慣れで詰まらない質問してしまってすみませんでした。
904 名前:865 [2018/06/20(水) 12:43:56.50 ID:XX+H87IB.net] みなさん、いろいろありがとうございました。 参考にさせていただきます。 ところで、 Cとアセンブリ言語で学ぶ計算機プログラミングの基礎概念 - プログラムはプロセッサ上でどのように実行されるのか 角川 裕次 https://www.amazon.co.jp/dp/4627848315/ この本を読んだ人はいますか? かなり自分にとって理想的な本のようですので、買ってみようと思います。 こういう本を読めば、少しは言語の設計者の気持ちが分かるようになるのではないかと期待します。
905 名前:デフォルトの名無しさん mailto:sage [2018/06/22(金) 23:22:38.51 ID:pTq2TJuj.net] あちらこちらでC++はひどい言語だって叩かれてるけどその割に広く使われている つまりこれはC++を頑張って覚えればその分見返りも大きいということではなかろうか。なにしろ人の嫌がること高いスキルが必要なことはそれだけ報酬も高いはずで
906 名前: mailto:sage [2018/06/23(土) 00:11:02.67 ID:OlLfOCSW.net] C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを 追っぱらうため *だけ* だったとしても、それ自体、C を使う強力
907 名前:ネ理由になりうる。 C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、 それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる: - うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が 安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、 もはや笑えるレベルを超えている) - 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに 効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の コードがその素晴らしいオブジェクトモデルに依存していて、直すためには アプリ全体を書き直さなきゃなんない。 言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに 限定するってことは、他の人がそれをめちゃくちゃにしないってことで、 ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい 「オブジェクト・モデル」のたわごとを持ちこまないってことだ。 [] [ここ壊れてます]
908 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 10:31:52.34 ID:UiVIxiJp.net] 抽象化とコード(バイナリ)の質は相反するものだから
909 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 11:45:24.39 ID:NcXYPjUn.net] alignas(32)とかalignas(64)とかつけなくても大体アライメント揃ってる気がするんですけどつけた方がいいんですか?
910 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 12:58:59.14 ID:g5s8p4AT.net] リーナスのそれがいっちばん有名なC++批判よね
911 名前: mailto:sage [2018/06/23(土) 13:53:36.35 ID:OlLfOCSW.net] >>893 linus は昔から C++ を批判していたが、git 開発に関する 2009 年のこれが、最も効果的な批判になっていますね これを読むと C++er は一瞬自分がわからなくなりゲシュタルト崩壊に陥りますね、もう c++11 over を追いかける気力も失せてしまいました…
912 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 14:43:13.01 ID:DOoRmJ6H.net] 抽象的な思考ができる人とそうでない人が居るというだけだな >>890 もSTLやboostの使い方が理解できない、良い抽象モデルが作れない人が愚痴ってるだけにしか読めんが
913 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 14:54:08.05 ID:UiVIxiJp.net] 抽象化が目的になって パフォーマンスとか使用リソースとか工数を軽視する人が実務経験の浅い人に多い ってのが問題であって 言語自体には罪はない
914 名前: mailto:sage [2018/06/23(土) 15:32:24.63 ID:OlLfOCSW.net] >>895 >良い抽象モデル が役に立つとは限らないのでは? 抽象化を目的とするあまりに YAGNI を忘れてしまうのでは、これは重大な思考的欠陥なのでは? あれほどもてはやされていた GoF は、すくなくとも C++界では、もうみるかげもなく凋落の一途をたどっているのは、どうみるのでしょうか?
915 名前:デフォルトの名無しさん [2018/06/23(土) 16:46:26.83 ID:8e5n022B.net] デザインパターンって廃れたんですか? だとすると、なぜ、デザインパターンは流行り、そして廃れたのでしょうか? 一度は流行ったということは確かに役に立つものだったのではないでしょうか? 一度は役に立つと認められたものがなぜ、否定されたのでしょうか?
916 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 16:51:17.93 ID:7hlQnbj9.net] 日本人は基本すっ飛ばして銀の弾丸欲しがるからな
917 名前:はちみつ餃子 mailto:sage [2018/06/23(土) 17:00:49.94 ID:/E9OfcV+.net] >>898 デザインパターンってのは典型的なパターン (に名前を付けたもの) ってだけだよ。 基礎として押さえておくと便利だし、価値が失われたわけではないけど、 何もかもが既存のパターンに当てはまるわけではないという当たり前の話。
918 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 17:15:09.64 ID:DOoRmJ6H.net] >>897 抽象化とYAGNIは関係ありません こういう意見が出てくるあたりが良いモデリングを理解してない証拠ですね
919 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 17:29:02.45 ID:ul2D0Jgq.net] >>898 別に廃れたわけではなく、使われるものは当たり前に使われてて取り立てて言われなくなっただけ。
920 名前: mailto:sage [2018/06/23(土) 17:30:40.89 ID:OlLfOCSW.net] >>901 たとえば、iostream をどう思う?これは良い抽象化の例ですか?
921 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 17:31:54.13 ID:wjw7dXXk.net] Visual C++6.0です。 Windows7でやってます。 ツールバーを作ると、ボタンを押すとペコってへこんで、また押すとまた戻りますが、見づらいので 押したときと戻ったときとで色を付けたいのですが、どこかにサンプルはないでしょうか また、私は未だに6.0でやっていてこれで十分にプログラムできるので特にこれで不満はないのですが もしバージョンを上げれば出来るのであればバージョンアップも考えたいと思っています 最新のバージョンで出来るのなら、そのサンプルも教えて頂けるとありがたいです
922 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 17:40:24.88 ID:LiutUffZ.net] >>904 OwnerDraw
923 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 17:59:38.49 ID:wjw7dXXk.net] >>905 CToolbarには、DrawItemがないようなのですが ステータスバーにはあります
924 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 18:04:15.08 ID:LiutUffZ.net] ナンシークラッツ本を探した方が良いかな
925 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 18:14:04.63 ID:wjw7dXXk.net] ツールバーに色を付けることもできないとか。ちょっと貧弱ですよね 最新のバージョンのVC+でも出来ないのかな。結構そういう要望はあると思うけど
926 名前:デフォルトの名無しさん [2018/06/23(土) 19:24:24.28 ID:8e5n022B.net] 2分探索木を実装したC++プログラムを読んでいますが、分からないところに出くわしました。 ノードは以下のクラスです: template <typename T> class BinNode { private: T data; BinNode<T> *left, *right; BinNode(T d, BinNode<T> *l = NULL, BinNode<T> *r = NULL); friend class BinarySearchTree; }; 2分探索木のクラス BinarySearchTree 内のメンバ関数 insert の引数としてノードを渡すのですが、 なぜ、 BinNode<int>* tree ではなく BinNode<int>*& tree となっているのかが分かりません。本の説明によると、木構造の変形を可能にするためにそうしているとのことです。 bool BinarySearchTree::insert(int data, BinNode<int>*& tree) { … }
927 名前:デフォルトの名無しさん [2018/06/23(土) 19:25:19.09 ID:8e5n022B.net] >>899 >>900 >>902 ありがとうございました。 一時は、もてはやされすぎたということですね。
928 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 19:28:47.13 ID:8e5n022B.net] insert 内に、 if (tree == NULL) {
929 名前:デフォルトの名無しさん [2018/06/23(土) 19:29:33.57 ID:8e5n022B.net] insert 内に、 if (tree == NULL) { tree = new BinNode<int>(data); … } というコードがありましたが、これのことでしょうか?
930 名前:デフォルトの名無しさん [2018/06/23(土) 19:30:15.04 ID:8e5n022B.net] >>912 あ、そのようですね。
931 名前:放置された蟻人間 mailto:sage [2018/06/23(土) 19:30:26.05 ID:QXtVRpnb.net] >>909 void f(int *a) { static int s_i = 0; a = &s_i; } int main(void) { int i = 3; int *p = &i; f(p); printf("%d\n", *p); return 0; }
932 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 19:45:59.33 ID:8e5n022B.net] >>914 ありがとうございました。 3のままですね。
933 名前: mailto:sage [2018/06/23(土) 19:54:24.54 ID:OlLfOCSW.net] >>909 これは C の課題ですね。 適当な二分木ないし二分探索木に対して、ノード(節)を追加したり削除したりする関数を書く場合、 C ならば add_node(node **root, ...) と書きます。@ これを C++ ならば add_node(node *&root, ...) と書くこともあります。node *&root は「ポインタ変数の参照」です。A @とAとではプログラムの表現もかわります。 これは一度、白紙の状態から自分の手で書くのが、理解するのに一番です。お試しあれ。
934 名前:デフォルトの名無しさん [2018/06/23(土) 21:09:04.41 ID:nmsTY6vF.net] 0,115200 1,38400 2,19200 3,9600 こういう関係がある時に配列を作れば1から38400はダイレクトに求められるが 検索を使わずに38400からダイレクトに1を求める方法はないだろうか?
935 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 21:22:36.64 ID:b0QIE6qX.net] 115200個の配列
936 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 21:26:12.81 ID:EyvIrgyz.net] A/9600 を添え字にして13個の配列で逆引き作る?
937 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 21:29:09.89 ID:b0QIE6qX.net] 9600の倍数であることがわかってるなら割ればテーブルは減る でも4個なら素直に検索した方が速い
938 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 21:41:29.91 ID:EyvIrgyz.net] 検索については同意 元質問は検索使うなって条件なので、まぁ 数値からRS232Cのボーレート設定を想定しちゃうけど、 それなら検索を嫌うようなもんでもないし… な…
939 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 22:02:58.56 ID:ZZklpiyn.net] a1 : b1 a2 : b2 a から、b への辞書と、 b から、a への辞書の、両方を作る
940 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 22:07:27.68 ID:V32XRqjB.net] >>920 は>>919 を見る前に書いた たまたま同じ発想になっただけ 浮動小数数に直すってのもある LSB側から数えて1になるビット位置を返す命令があるのでそれとシフトを使う 115200は(900, 7) 38400は(300, 7) 19200は(300, 6) 9600は(300, 5) RS-232Cだと300x2^nと900x2^nしか普通は使わないから オーディオのサンプリング周波数にも同じような方法が使える
941 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 22:09:33.77 ID:5Wb6fwhK.net] n = (x/9600 > 4) ? 0 : 3 - log2f(x/9600); 入力を検証する手間を考えたらテーブル逆引きと大差ないけど
942 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 22:19:10.79 ID:V32XRqjB.net] >>924 メモリアクセス速度を考えても>>918 の方が速くて簡単 >>923 なんかおかしかった 115200は(225, 9) 38400は(75, 9) 19200は(75, 8) 9600は(75, 7) ビットスキャン命令とシフトとテーブル 変換しなきゃならないデータが多量にあって パフォーマンスが非常に重要ならこれを使うかな
943 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 22:21:03.20 ID:V32XRqjB.net] 普通はこんなものはリニア検索でいい
944 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 23:23:08.99 ID:ZZklpiyn.net] 普通、最適化でも、8個までは線形(全)探索・if 文 それ以上で、ジャンプテーブル・switch-case
945 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 23:47:49.24 ID:UiVIxiJp.net] >>927 ただのテーブル逆変換だぞ なんでジャンプテーブル? なんでswitch case? リニア検索で問題なら2分検索 それでも遅ければハッシュその他のテーブル 簡単な演算を併用出来るものはする じゃないか普通
946 名前:927 mailto:sage [2018/06/24(日) 00:50:44.41 ID:chBT6m1a.net] コンパイラの最適化について書いた if 文を8個以上書くと、ジャンプテーブルに変換されるってこと
947 名前:デフォルトの名無しさん [2018/06/24(日) 08:15:02.59 ID:cbD8du/l.net] >>916 ありがとうございました。
948 名前:デフォルトの名無しさん [2018/06/24(日) 10:44:32.50 ID:8StK2ZXu.net] class clsAにconst member 変数を登録したいのだけどうまくいかない。 クラスコンストラクタでconst char *mes[] を{"abc","def"}のように 初期化するにはどうやるの?
949 名前:デフォルトの名無しさん [2018/06/24(日) 10:57:11.49 ID:8StK2ZXu.net] //そもそもC++は文字列の配列を扱うことができるのか? constexpr auto str1 = {"abc", "def"}; これがエラーするんだがなんでなの?
950 名前:デフォルトの名無しさん [2018/06/24(日) 11:00:18.70 ID:8StK2ZXu.net] constexpr string[] str1 = {"abc", "def"}; コンパイルエラー constexpr string str1[] = {"abc", "def"}; コンパイルエラー クッ、、、どうしてもうごかない。
951 名前:デフォルトの名無しさん [2018/06/24(日) 11:15:54.16 ID:8StK2ZXu.net] string str1 = "abc"; //OK vector<int> dat(100,3); //ok vector<string> str2("aaa",4); //error こういうのもうごかない。
952 名前:デフォルトの名無しさん [2018/06/24(日) 11:23:27.77 ID:8StK2ZXu.net] 自分としてはストリングを多用するのでストリング配列が使えないと厳しい。 検索をしても例がなかなか出てこないので、Effectiv Modern C++という本 をamazonで買ってみたんだが、届いたので今見ているところだが、ここでも string配列の記述を巧みに避けている。皆目出てこない。 string配列の扱い方ってどうやるの?
953 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 11:52:20.14 ID:/GbiIoLW.net] 文字配列って良く分からないけど、Javaみたいに一文字だったりして? {"a","b","c","d","e","f","g"}みたいな?
954 名前:はちみつ餃子 mailto:sage [2018/06/24(日) 12:32:00.67 ID:StWe8jKY.net] >>932 定数式じゃないから。 >>933 string は constexpr に非対応のはず。 現時点では。 new が constexpr 的に扱いが難しいので、 内部的にヒープを使うようなクラスはほとんど constexpr 非対応だと思う。 ただ、制限を緩和する提案は出ているので将来的にはなんとかなるかもしれない。 >>934 string に一文字づつ入れたいってこと? std::vector<std::string> str2 = {"a", "a", "a"}; でいけるよ。
955 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 12:35:35.92 ID:QFRKHUIu.net] ["abc","def"];