- 1 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 01:08:48 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.65【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1239326399/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 35 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 05:07:28 ]
- はい
- 36 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 08:09:11 ]
- 来年就職に備えて、行き当たりばったりな開発の仕方から
しっかりと設計してから開発の流れにもっていきたいんだけど、 デザインパターンとかUML学べばおk? ためになる資格とかお薦めの参考書あれば教えてくほしい
- 37 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:09:35 ]
- struct Hoge {
int hoge; ... }; class Hoge { Hoge():hoge(0){} public: int hoge; ... }; 上みたいにclassにメンバ関数加えても、継承や仮想関数を使わない限り同じメモリ配列になるのは決まってるんでしょうか それとも、そう思い込んではいけませんか
- 38 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:24:33 ]
- NULLポインタをdeleteしても何も起こらないらしいですが、配列のポインタの場合がNULLポインタだった場合にdelete[]をしても何も起こりませんよね???
- 39 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 11:43:01 ]
- 起こりませんよ!!!
- 40 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:11:02 ]
- まあ、NULLのポンタをdeleteする時点で
何か間違ってる可能性は否定しない
- 41 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:18:00 ]
- ポンタか
なるほどね
- 42 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:57:13 ]
- ぬるぽんた
- 43 名前:38 mailto:sage [2009/05/30(土) 14:15:34 ]
- デストラクタでわざわざif (pArray) delete[] pArray;って書くのもナンセンスなのかなって思っただけです。
普通のポインタはdelete p;で済ませますよね? で、配列もやっぱり同じことができるのかな、と。 "delete[]"で検索してみても、[]はキーワードにならないみたいで、マッチしたページが出てこないのでここで質問してみました。
- 44 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 14:48:28 ]
- >>43
うん,ナンセンス。 NULLをdelete[]しても何も起こりませんからご安心ください!!!
- 45 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 14:54:16 ]
- >>40
行田市でタヌキの赤ちゃんが見つかったニュースですね
- 46 名前:デフォルトの名無しさん [2009/05/30(土) 16:22:53 ]
- VC2008で関数にカーソル合わせると、ヘッダファイルに書いた宣言とコメントが表示されたような気がするのですが、コメントが表示されません。
コメントはヘッダのどこに書けば表示されるのでしょうか。 それともなにか設定があるのでしょうか?
- 47 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:27:01 ]
- >>37
コンストラクタ、デストラクタ、コピーコンストラクタ、代入演算子以外なら大丈夫 これらを一つでも作った場合は規格上は保証されない
- 48 名前:デフォルトの名無しさん [2009/05/30(土) 19:39:16 ]
- >>38
そんなのやる時間があったら、なにかソフトを1つ自分で書いてみろ。
- 49 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:32:16 ]
- >>48
は?w
- 50 名前:デフォルトの名無しさん [2009/05/31(日) 12:34:34 ]
- std::vector<T>の最後尾の要素を移動したいとき、
std::vector<T> vec; T tmp = vec.back(); vec.pop_back(); という感じで、二段階でやるしかないでしょうか?
- 51 名前:デフォルトの名無しさん [2009/05/31(日) 13:57:17 ]
- C++の参照渡しについての質問です。
以下のようなメンバ関数があったとします。 SStruct GetReturnStruct() const; INT32 GetReturnINT() const; これらの関数を以下のように使用します。 1. SStruct sStruct = GetReturnStruct(); 2. INT32 nINT = GetReturnINT(); 3. SStruct& sTestStruct = GetReturnStruct(); 4. INT32& nTestINT = GetReturnINT(); 5. const SStruct& c_nTestStruct = GetReturnStruct(); 6. const INT32& c_nTestINT = GetReturnINT(); 実行環境はVisualStudio2005です。 1と2は普通にコンパイルして実行できるのですが、 3と4の場合、3はコンパイルが通り、4はエラーメッセージ 「'INT32' から 'INT32 &' に変換できません。」 が出てしまいました。 また、5と6ではコンパイルが通りました。 1から6までは内容的には同じ値が入ると思うのですが、 内部的な処理はそれぞれどのようになされているのでしょうか? 構造体などを使うときはなるべく参照かポインタを引数にしたほうがよい と聞いたのですが、参照の使い方がまだ今ひとつ理解できていません。 どのような場合に参照渡しをしたほうがよいのでしょうか?
- 52 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:49:15 ]
- >>51
参照渡しと言えば普通は引数についての議論だけど、 1〜6は戻り値の受け取り方だろ。噛み合ってない。 まあ、戻り値について言えば、3〜6は参照先の実体が失われるような受け取り方なので、 危険であり、ありえない。 内部的な処理で言えば、参照はポインタと同じで、どこかにある実体を指しているだけ。 実体は他でちゃんと保持されなければならない。
- 53 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:51:16 ]
- >>50
例外安全のために二段階に分けられている。 そのやり方しかない。
- 54 名前:デフォルトの名無しさん [2009/05/31(日) 15:28:12 ]
- >>52
ごめんなさい、参照での戻り値についての質問でした。 3〜6は参照先の実体が失われるとのことですが、 具体的にはどのようなケースで危険が発生するのでしょうか SStruct& sTestStruct = GetReturnStruct(); は 1.GetReturnStruct()で返り値の変数が作られる 2.それを参照する。 SStruct sTest1Struct = GetReturnStruct();は 1.GetReturnStruct()で返り値の変数が作られる 2.宣言SStruct sTest1Structで変数が作られる 3.返り値の変数をsTest1Structに代入 と思っていたため、変数が作られるのが一つ少ない分 SStruct& sTestStruct = GetReturnStruct(); の方が良いと思っていたのですが・・・
- 55 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:15:17 ]
- >>54
> SStruct& sTestStruct = GetReturnStruct(); は > 1.GetReturnStruct()で返り値の変数が作られる > 2.それを参照する。 つづきは 3. 1で作った返り値の変数が破棄される。(参照は破棄済みのデータを指すことになり、使えない) > SStruct sTest1Struct = GetReturnStruct();は > 1.GetReturnStruct()で返り値の変数が作られる > 2.宣言SStruct sTest1Structで変数が作られる > 3.返り値の変数をsTest1Structに代入 つづきは 4. 1で作った返り値の変数が破棄される。(コピー済みのsTest1Structは残るので、使える)
- 56 名前:デフォルトの名無しさん [2009/05/31(日) 16:32:15 ]
- >>55
Thanks ですが、 SStruct& sTestStruct = GetReturnStruct(); では、その後も普通に取得した値の参照が使えてしまいます・・ なぜこのような事態が発生するのかわかりますでしょうか?
- 57 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:58:56 ]
- >>56
ごめん、私の勉強不足のために嘘を教えてしまった。 ttp://www.sun-inet.or.jp/~yaneurao/intensive/cppmaniax/chap0001.html にあるように、const参照は一時オブジェクトを束縛するということなので、5と6はOK。 3が通るのは、そのコンパイラが一時オブジェクトを破棄するタイミングを たまたま遅らせているだけと考えられるので、 環境を変えたときに安全は保証されないと思う。
- 58 名前:デフォルトの名無しさん [2009/05/31(日) 17:28:49 ]
- const参照は一時オブジェクトを束縛する
ということで了解しました。回答ありがとうございます。 ところで、クラスのメンバ関数の作り方で再び質問で、 以下のようなクラスがあるとします。 class CTest { private: SStruct m_sTestStruct; public inline VOID GetStruct(SStruct& sGetStruct) { sGetStruct = m_sTestStruct; } inline SStruct GetStruct() { return m_sTestStruct; } } メンバ変数のm_sTestStructを取得する関数の書き方としては、 1. VOID GetStruct(SStruct& sGetStruct); 2. SStruct GetStruct(); のどちらが処理的には良いのでしょうか? 直感的な見た目としては戻り値がSStructの方がわかりやすいと思うので 自分は大体2の方を使っております。
- 59 名前:デフォルトの名無しさん [2009/05/31(日) 17:30:10 ]
- あと、構造体の質問で以下のような構造体があるとします、
struct SList { SStraightCardList(); ~SStraightCardList(); E_TYPE eType; INT32 anArray[3]; }; このとき、以下のような初期化をしようとすると static const SList SLIST_DEFAULT = { eN_DEFTYPE, 1, 2, 3 }; error C2552: 初期化子リストによる個別の識別子の初期化に誤りがあります。 ユーザー定義のコンストラクタを含む型はアグリゲートではありません。 とのエラーメッセージで構造体の初期化がうまくいきません・・・ 構造体ではデフォルトコンストラクタを自分で定義してしまったら 初期化 = {..., ..., ...}; の書き方は使えないということなのでしょうか?
- 60 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:30:26 ]
- すいませんプリコンパイル済みヘッダーというのが使い方がよく分からないのですが、
pch.hファイルに使用する全てのヘッダーファイルのincludeを書いて、 他のcppファイルはpch.hのみincludeするというのが正しい使い方なんでしょうか
- 61 名前:デフォルトの名無しさん [2009/05/31(日) 17:32:40 ]
- すいません。コンストラクタ部分をこぴぺミスしました。
SStraightCardList()→SList()です。 よろしくお願いします
- 62 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:09:52 ]
- >>58
今はVOIDだが、他に戻り値が必要なら1。 SStructがコンストラクタを持つなら、コピーコンストラクタ一発で値を返すことができるので2。 SStructがただの構造体なら1も2も同じだけど、呼び出しが楽なので2。 それより良い手は const SStruct& GetStruct() const { return m_sTestStruct; } >>59 ttp://msdn.microsoft.com/ja-jp/library/0s6730bb(VS.80).aspx >>60 プリコンパイル済みヘッダには、各cppで共通のヘッダで、変更の少ないものを書くのが普通かと。 変更があると、全cppを再コンパイルする羽目になるので。 各cppはプリコンパイル済みヘッダと、不足分のヘッダをincludeする。
- 63 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:03:18 ]
- int data_1[100][200]
int* p_data; p_data = &(data_1[0][0]); として、 p_data[50][70]; などとしてデータを取り出したいのですが、うまくいきません。 *(p_data + 50*200 + 70)とすれば取り出せることは分かったのですが、 2次元配列形式でデータを取り出すのは不可能なのでしょうかデータのコピーはしたくありません
- 64 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:06:10 ]
- int* p_data[][];
もしくは int* p_data[100][200];
- 65 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:13:56 ]
- int* p_data[][];
と記述するとコンパイルエラーになります。 あと、p_dataの参照先はdata_1だけでなく、 条件によってサイズの異なる別の配列を参照する場合があるので、 サイズを固定することはできないです。
- 66 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:14:43 ]
- 先頭を渡すなら p_data = &(data_1[0][0]);
じゃなくて p_data = data_1;
- 67 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:16:01 ]
- >>65
サイズが違うなら多次元配列を1次元配列とみなして *(p_data + 50*200 + 70) のような感じでアクセスするしかないんじゃない?
- 68 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:52:22 ]
- typedef int (*data200)[200];
data200 p_data = data_1[50]; return p_data[70];
- 69 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:54:47 ]
- >>68
それだと前の配列しか可変になってねえ?
- 70 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:21:53 ]
- >>65
ポインタの配列を使えば可 でも、受け取った関数側でサイズを知る方法が無いから 追加の引数でサイズを渡すとか構造体にまとめてから渡すとかしないとダメぽ struct tag_matrix_t { int width, height; int **data; }; みたいに
- 71 名前:デフォルトの名無しさん [2009/06/01(月) 11:30:21 ]
- std::vector<T> vec;
std::deque<T> deq; があるとき、中の要素を適当に並べ替える関数を定義したいのですが、オーバーロードを使って、 mysort(std::vector<T> &v); mysort(std::deque<T> &d); とやっていたのですが、イテレータ引数の関数を定義して1つにまとめてしまいたいです。 どうやればいいですか? テンプレートを使って書くのは、結局自分ではイテレータを定義してないというか、 dequeやvectorのテンプレート機能を呼び出しているだけという感じがするのですが。
- 72 名前:デフォルトの名無しさん [2009/06/01(月) 12:18:40 ]
- ファイルからの入力の場合、vectorのソートと、setのソートはどっちが速いですか?
メモリに一気に格納してソートか、一つずつソートする違いです。
- 73 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:21:20 ]
- >>72
テストソース書いて実測してみればいいよ。 ファイルの置き場所によって変わる可能性もあるだろうけど メモリに一回あげたほうが早いと思う
- 74 名前:デフォルトの名無しさん [2009/06/01(月) 12:23:51 ]
- ありがトン
実測してみます
- 75 名前:デフォルトの名無しさん [2009/06/01(月) 13:20:15 ]
- 最小2乗法によるm次の多項式近似を行うプログラムを教えてください
教えて xがー2の時yが3.02 −1の時0.98 0の時1.22 1の時2.16 2の時2.61 の時のです 出来ればソース全文書いてください
- 76 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:23:04 ]
- いいえ
- 77 名前:デフォルトの名無しさん [2009/06/01(月) 14:33:33 ]
- VS2008でC++でコンソールプログラムを書いてます。
std::cout << "" << std::endl; とかで出力を出しているのですが、それをテキストファイルに書き込みたいのですが、 プログラム内でファイルを開いてそこに書き込んで、、、渡河やらないと駄目でしょうか?
- 78 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:38:39 ]
- > でリダイレクトすれば標準出力をファイルに落とせる
- 79 名前:デフォルトの名無しさん [2009/06/01(月) 15:54:04 ]
- Windows & C++の質問です。
例えばCのqsort()関数のように、中身を直接弄らなくても、 ユーザが処理の一部を書けるようにする……という手法がありますよね。 とあるフレームワーク(ライブラリ群)を作成するにあたり、 エントリポイント(main関数)を隠蔽した状態で、一部の処理をユーザに記述させるにはどうやるのがスマートでしょうか? 現在こちらが想定しているイメージとしては、フレームワーク開発側が以下のようなコードを書いておき、 その中の setting.init() をユーザに用意してもらう……といった感じです。 int main ( 〜 ) { Setting setting; //適当なシングルトンクラス setting.init ( ); //ユーザが記述する初期化処理 /*メイン処理*/ return 0; } Setting::init()は、中身が空っぽでも大丈夫とします。 その際、もし可能であれば、わざわざユーザがinit()部分を書かなくても良いようにしたいなあと考えています。 Settingクラスには、init()以外のメンバ関数があり、それらはユーザがタッチしなくてもよい部分です。 そのため、それらはフレームワークの中に隠蔽しなければなりません。 ですが、そのままやると、1つのクラスがフレームワークの内外に散ってしまうので、なんとなく気持ち悪いです。 継承や関数ポインタも考えましたが、main()内を弄らずに指定する方法が分かりません。 また、DLLを用意して読み込む方法はナシとします。
- 80 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 19:33:03 ]
- Cの初心者本でオススメってなんかない?
基本情報の午後にむけて勉強したいもんで
- 81 名前:デフォルトの名無しさん [2009/06/01(月) 19:54:20 ]
- VC++ 2008 にて、コントロールのサブクラス化を行っているのですが、
ボタンのクリックイベントで詰まりました。 ウィンドウプロシージャ内で、 マウスの左ボタンクリックのイベントを拾いたいのですが、 WM_LBUTTONDOWN、WM_LBUTTONUP や ダブルクリックの WM_LBUTTONDBLCLK はあるものの、 シングルクリック(マウスを押して離す)の定義が見つかりませんでした。 WM_COMMAND だと親コントロール依存になってしまうので避けたいです。 .NETクラスライブラリの Control.WndProc を覗いてみると、 WM_LBUTTONDOWN の際に、押された事を示すフラグを内部的に立て、 フラグが立っている状態(そのコントロール外でマウスボタンを離さない)で、 WM_LBUTTONUP が来たら クリックイベント発動。 という、けっこう面倒な処理をしていました。 どうしようもなければ、.NETと同じようなコードにしようと思うのですが、 もっと簡単な実装などありますでしょうか? よろしくお願い致します。
- 82 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:30:23 ]
- >>81
多分無い ボタンに対して マウスLB押下 そのまま ドラッグしていって ボタンの範囲外に抜けた後に マウスLB開放 した場合とかを考え出すとね…
- 83 名前:デフォルトの名無しさん [2009/06/01(月) 20:48:19 ]
- メモリマップ度ファイル便利と思って多用していたが、
巨大なファイルのシーケンシャルリードするとメモリ解放しないままで 次々に読むから不安定になるな。
- 84 名前:83 [2009/06/01(月) 20:51:35 ]
- 自分の予定では、次に読むだろうところだけ先読みして
あとは開放しているもんだと思っていた。 しかしためられるだけためてた。
- 85 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:07:33 ]
- >>82
ありがとうございます。やっぱ厳しそうですね。。。 .NETのクラスライブラリを参考に作ることにします。
- 86 名前:デフォルトの名無しさん [2009/06/01(月) 21:13:30 ]
- >>83,84
もしよかったら、どういうシチュエーションで便利に使ってたか教えてよ。
- 87 名前:83 [2009/06/01(月) 21:28:40 ]
- メモリにロードせずに、そのまま操作できるところ。
ケースによっては、自前でバッファを管理して入出力するより高速に動く。 OSやディスクのキャッシュが適切に効いた場合、入出力バッファ処理を気にする必要がなくなる。
- 88 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:45:44 ]
- >71
template<typename RandomAccessIterator> void mysort(RandomAccessIterator first, RandomAccessIterator last); の何が不満なの? 他人が書いた Iterator を使って望みの事ができるならわざわざ自分で書く必要ないだろ? そもそもコンテナ用の Iterator 書くならコンテナの実装を知ってる方がいいわけで、 その意味でも自分で書く必要がない。 >84 物理メモリ上に載ったままって話?
- 89 名前:デフォルトの名無しさん [2009/06/01(月) 21:49:42 ]
- 物理メモリにはのったままではないけど、ギリギリまで使い切ってる。
あとは仮想メモリに入っているよう。この仮想メモリはOSのものとは別物の気がする。 メモリマップドファイルすると、した分は仮想メモリとしてOSは認識しているようにおもう。
- 90 名前:デフォルトの名無しさん [2009/06/01(月) 21:53:09 ]
- 予想では、次々に同一ファイルのロードが起こると、
OSは大事なファイルと認識しメモリに蓄えておこうとするのだと思う。 もっとも最近に参照されたファイルが優先されて、そのファイルだけが残ると思う。
- 91 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:57:14 ]
- >>90
OSじゃなくメモリマップドファイルを実現してるクラスとかがメモリを確保してるだけでしょ windowsだと確か設定を変えなければ一つのアプリが最大使えるメモリって 2GBだっけ? そのくらい物理メモリ詰んでなければそりゃ使い続ければいずれ物理メモリを超えるので スワップ発生するだろうし
- 92 名前:デフォルトの名無しさん [2009/06/01(月) 22:21:16 ]
- メモリマップドファイルは、windowsが用意している関数でそのメモリ使用量を自前で制御できない。
まったくメモリにキャッシュしないようにするオプションはあるけど。 OSの制御にあって、使用中は全く手出しできない。
- 93 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:44:39 ]
- WindowsXP VisualC++2008EEです。
クラスの中のメンバクラスに関する質問です。 ---------------------------- class ClassA{ ClassA( int a, int b ) { }; //コンストラクタ ^ClassA( void ) { }; //デストラクタ }; ---------------------------- 上記のように引数付きのコンストラクタを持つクラスがあるとき ---------------------------- class ClassB{ private: ClassA mClassA( 1, 2 ); }; ---------------------------- といった形で、メンバクラスを宣言しようとすると、 「error C2059: 構文エラー : '定数'」 といったエラーが出てきてしまいます。 引数付きのコンストラクタがあるクラスをメンバとして持つには、 どのようにすればよいのでしょうか?
- 94 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:47:20 ]
- >>92
そういう作りなのか まあ気に入らなければ自分で作ればいいだけだしな。
- 95 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:53:25 ]
- >>93
class ClassB { ClassA mClassA; ClassB() : mClassA( 1, 2 ) {} }; classB のコンストラクタで メンバの初期化
- 96 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:24:42 ]
- funini.com/kei/mmap/mmap_api.shtml
- 97 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:24:43 ]
- >>79
Settingクラス(フレームワーク提供)を継承したクラスをユーザが定義し、 そのファクトリ関数もユーザが定義するようにすればできない? Setting::init()は空の仮想関数。 ファクトリ関数はグローバルで、関数名とプロトタイプはフレームワーク仕様により規定。
- 98 名前:デフォルトの名無しさん [2009/06/01(月) 23:42:28 ]
- jpgファイルをWindowsのアプリから表示したい時、boost::gilを使ってる人いますか?
使う言語はC++なのですが(Win32APIは出来る限り使ってません)、 WindowsのAPI使った方がいいのか、わざわざboost::gil使う意味あるのか。
- 99 名前:79 mailto:sage [2009/06/01(月) 23:42:39 ]
- >97
ありがとう。 ファクトリ関数が何なのか調べるところから始めてみる。 ……要は、継承先のクラスを指定する部分だけを フレームワークの外に出してしまえばいいんじゃね?ってこと?
- 100 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:44:49 ]
- >>95
ありがとうございます! 動きました・・・・が、見たこと無い形なので、なぜ動いたかが分からない・・・。 「コンストラクタ初期化子」というのがあるそうですね。 そういうものだと割り切って覚えるのが早いでしょうか。
- 101 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:02:16 ]
- コンストラクタの初期化リストは大事だから
知らなかったならちゃんと勉強し直した方がいい
- 102 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:07:25 ]
- 初期化リスト使えないとconstなメンバを初期化できないから注意な
- 103 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:10:43 ]
- コンストラクタの後ろにコロンで繋げて
初期値を指定するのって、地味にめんどい
- 104 名前:砂ぐま [2009/06/02(火) 00:28:02 ]
- 教えてください。
[1]C++ [2]締切:6/3 [3]問題文 以下の問題はprintf scanfを用いらず、cin coutを使用しなさい @2つの4行4列の行列が与えられたとき、 その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。 (※ヒント whileループは行列をキーボードから入力するためにも用いる) A3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。 (1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム (2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム Bwhileループと複合代入演算子を用いて、等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。 CBのプログラムを実行した結果はいくらになるか? D型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、 int型のオペランドはdouble型に変換されて、計算される。 下記は例である。 int a; float b; a=(int)b また、下記のようにすると、 int a=5,b=3; float c,d; c=a/b; d=a/(float)b で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。
- 105 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:29:27 ]
- >>101
まだまだ勉強中の身なのです。 >>102 なるほど! 確かにconst指定したメンバが コンストラクタで初期化できないから、 どうするんだ?、と悩んでたことがありました。 >>103 そうですね。自分も30個くらいメンバが必要なので 同じことを考えていました。
- 106 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:45:58 ]
- >>104
具体的に何が分からないのか答えなさい。(5点)
- 107 名前:砂ぐま [2009/06/02(火) 01:20:43 ]
- >>106
解答をお願いします。
- 108 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:24:20 ]
- >>107
宿題スレへ行くほうがいい。
- 109 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:12:17 ]
- >>108
宿題スレとマルチしてるんだけどな
- 110 名前:デフォルトの名無しさん [2009/06/02(火) 03:57:02 ]
- boost::gilの使い心地の方もお願いしま〜す。
- 111 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 04:06:56 ]
- >110
こっちは? pc12.2ch.net/test/read.cgi/tech/1232367742/
- 112 名前:デフォルトの名無しさん [2009/06/02(火) 05:41:26 ]
- int i =100;
float* pf = (float*) &i pf = pf * 2 このコーディング、どこだダメなんでしょうか
- 113 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:47:46 ]
- >>112
intとfloatの内部表現が一致している保証はどこにもないから それとポインタに対する演算はアドレスを取る事と定数を足す引く しか認められていないからポインタを2倍するとか全く無意味
- 114 名前:デフォルトの名無しさん [2009/06/02(火) 05:53:16 ]
- ありがとうございます。
内部表現が一致するとは、具体的にどういうことでしょうか? これであればアドレスの中身(100?)を2倍することになるのでしょうか *pf = *pf * 2
- 115 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:57:52 ]
- >114
内部表現が一致するとはiと*pfの値が等しい時に常にiと*pfのビット列 が等しい事が保証されている事を意味する しかし実際には大部分の計算機では浮動小数点はIEEE754、整数は 2の補数表現を取っている事が大部分で内部表現にお互いの互換性 はない >*pf = *pf * 2; *pfが元々floatの変数のアドレスを取っている時はその通り 今のように元々intの変数のアドレスを取ってそれを2倍したら浮動小数点例外 が起きるかもしれない
- 116 名前:デフォルトの名無しさん [2009/06/02(火) 06:36:32 ]
- 高精度の文字エンコード判定・自動変換ライブラリ
で一番いいのはなんでしょうか?
- 117 名前:デフォルトの名無しさん [2009/06/02(火) 06:43:49 ]
- 秀丸とかEmとかは判定どうやっているのかわかりませんか?
(世界各国で通用するのは)モジラかIEくらいしかしりません。 エディタの作者は自分で作っているんですか?
- 118 名前:デフォルトの名無しさん [2009/06/02(火) 07:06:57 ]
- ありがとうございます。
- 119 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:59:01 ]
- >>117
ちょっと文字コード調べればわかると思うけど、 それぞれの文字コードで仮定して矛盾が生じたら違うと判断すればいいんだよ。 どこまで調べるか、どうやって調べるかはそのアプリの性質で決めたらいい。 判定不能な場合どうするかもね
- 120 名前:デフォルトの名無しさん [2009/06/02(火) 10:07:44 ]
- 理屈はわかりますが、実際にやると大変です。
これはエディタの本体(GUI)を作るほど手間がかかりそうです。 世界各国語に対応させる場合。
- 121 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 10:11:05 ]
- >>120
文字コード扱うプログラマとしては常識の範囲ですが・・・ テキストごときでwwwとかいうゆとり多いけどテキストほど面倒な物は無い。 文字コードを限定すればなんとかなるけど
- 122 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 10:17:18 ]
- たかがテキストごときで
- 123 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 11:24:03 ]
- 文字コードの自動判別は不可能なんだから実装する必要なし
ユーザに選択させればいいだけ ブラウザはhttpヘッダのcharsetで判定してるだけだろ
- 124 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:53:00 ]
- ICUライブラリを使う(キリッ
- 125 名前:デフォルトの名無しさん [2009/06/02(火) 13:12:49 ]
- 判別、自動変換はできるのですか
- 126 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:29:39 ]
- とりあえず入力コードと出力コードを指定して一発で変換することはできるし、
CharsetDetectorっていう判別専用のクラスもある 世界中の業務用アプリで使われている実績もあるしライセンスも緩くて使い勝手もいい 問題は添付するdll(so)が糞大きいことだけ
- 127 名前:デフォルトの名無しさん [2009/06/02(火) 13:43:37 ]
- トンクス
- 128 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 16:55:47 ]
- float の NAN ってどういう値なんですか?
- 129 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 16:59:46 ]
- ttp://ja.wikipedia.org/wiki/NaN
- 130 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 17:03:22 ]
- ありがとうございます
- 131 名前:デフォルトの名無しさん [2009/06/02(火) 20:50:15 ]
- 質問です。
CLSはクラスで、int charなどの変数で構成されます。 CLSの変数と同じ順番で記録されているファイルがあり これを vector< CLS > x; にロードしたいのですが Read( &x[0] ) のようにしてもうまくいきません。 データが壊れています。 一括でロードする方法はありませんか?
- 132 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:54:22 ]
- ないと思うべき。
順番が同じでも、アラインメントが入ってどうせファイル上のデータの並びと同じではないだろう。
- 133 名前:131 [2009/06/02(火) 20:54:25 ]
- vectorのソートを使いたいんです。 構造体に読み込めば出来そうですが
それをvectorにコピーしたらいいでしょうか? 無駄なことをしている気がしますが。
- 134 名前:131 [2009/06/02(火) 20:56:51 ]
- サンクス
一度にロードして、vectorに正しく挿入することにします。
- 135 名前:デフォルトの名無しさん [2009/06/02(火) 21:01:25 ]
- すみません。 変更して構造体に入れてqsortにします。
|

|