- 1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 2 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:02:13 ]
- だぶった
- 3 名前:デフォルトの名無しさん [2008/02/28(木) 00:05:35 ]
- >>1乙
こっちのがかっこいいな
- 4 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:07:13 ]
- かっこいいって何だよw
こっちが遅いから、あっちが先だな。
- 5 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:08:28 ]
- 1乙です。
こっちもいいな〜
- 6 名前:デフォルトの名無しさん [2008/02/28(木) 00:09:53 ]
- 再現はさせられないけど・・・これだと一致してしまう
#include <iostream> #include <string> using namespace std; main(){ int n, sz=1024*100, step=8; string c(sz,'\0'),x="", y(sz,'\0'); for(n=0;n<sz;n++)c[n]=rand(); for(n=0;n<sz;n+=step){ x+=c.substr(n,step); memcpy(&y[n],&c[n],step); } if(x==y)cout<<"一致しました"; else cout<<"異なります"; }
- 7 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:20:29 ]
- まあ同じになるだろうな。
そうやってメモリをちゃんと確保してるなら問題は無い。 string は実は 0 を含むことができるしね。 (string += const char* としようとすると const char* の 0 が現れた時点で代入が止まるが) 現状の規格では string の内部バッファの連続性は保証されてないけど、 次期規格で保証されるようになる位一般的な実装だから心配は無いだろう。
- 8 名前:前スレ963 mailto:sage [2008/02/28(木) 01:06:23 ]
- 前スレ965,966様
よくわかりました。自分が馬鹿でした。ありがとうございました。
- 9 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:28:45 ]
- Visual C++ の質問です。
選択した画像ファイルのヘッダ情報?(フォーマット、カラースペース等)を 取得するにはどうすればいいのでしょうか 質問の意味が分からなければごめんなさい。 始めて右も左も分からないもので… よろしくお願いします。
- 10 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:34:12 ]
- 教えてあげて。
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1215014602 でもその前にこれ見てから。 ttp://blogs.yahoo.co.jp/downtown_sanma_1002
- 11 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:37:49 ]
- >>9
画像フォーマットに応じてヘッダ解析処理を書く。 画像フォーマットの仕様書はネット探せばあるだろ。
- 12 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:01:38 ]
- こっち使うのか。
まあかっこいいからしょうがないか。
- 13 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:36:13 ]
- コンストラクタでインスタンスの生成が始まって
実際にメンバ関数や変数が使えるようになるタイミングというのは気にしなくて良いのでしょうか? あと、派生クラスの時には仮想関数はコンストラクタ内で使用しない方が良いというのは本当なんでしょうか?
- 14 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:43:24 ]
- >>13
>実際にメンバ関数や変数が使えるようになるタイミングというのは気にしなくて良いのでしょうか? どういうときに気にする必要があるの? >コンストラクタ内で仮想関数 ケースバイケースだが、派生クラスでオーバーライドされたものが呼ばれると思ってると痛い目に会う。
- 15 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:14:54 ]
- >>13
>あと、派生クラスの時には仮想関数はコンストラクタ内で使用しない方が良い >というのは本当なんでしょうか? C++のオブジェクトモデルの観点から言えば、 少しおおざっぱだが(厳密さは省く)、コンストラクタにはコンパイラ によってvptrが自クラスの仮想関数テーブルへのポインタにセットされる タイミングがあって、コンストラクタボディでは既にセットされてしまって いる。基底クラスのコンストラクタボディでは基底クラスの仮想関数テーブル が参照される。どう頑張ってもポリモルフィズムは起こらない。
- 16 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:39:19 ]
- もしも仮想関数が純粋仮想関数だった場合にはどうなるんだろ
基底クラスには存在しない関数を呼び出すことになるので コンパイルエラーになるのかな?
- 17 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:47:24 ]
- >>16
定義が無いとリンクエラーだろうな。
- 18 名前:16 mailto:sage [2008/02/28(木) 14:54:58 ]
- >>17 どうもです
g++でテストしてみたよ エラーになった…コンパイルエラーっぽいけどリンカエラーなのかな 詳細は不明ですが、エラーになると。まあ当然ではありますが… >tes.cc: In constructor `A::A()': >tes.cc:12: error: abstract virtual `virtual void A::func()' called from constructor
- 19 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:01:24 ]
- >>18
認識合ってないかも。>>13からの流れのだよね? class Widget { public: virtual void jyunsui() = 0; Widget(){ jyunsui(); } ~Widget(){} }; class Budget : public Widget { public: void jyunsui() {} }; Budget b; こういうことじゃない?
- 20 名前:16 mailto:sage [2008/02/28(木) 15:13:34 ]
- >>19
コンストラクタから仮想関数を呼び出すときに仮想関数テーブルにある 関数が呼び出されるという話を聞いて 仮想関数が純粋仮想の場合はどうかなと思った次第であります あまり深い意味はありません、すみません… テストしたコードは19さんのコードと同じです コンパイルすると >tes.cc: In constructor `Widget::Widget()': >tes.cc:8: error: abstract virtual `virtual void Widget::jyunsui()' called from constructor
- 21 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:23:31 ]
- >>20
へえ、コンパイルエラーなんだ。 Comeau C++ では警告は出たけどコンパイルできた。 VC++2008だとリンクエラーになったね。 定義すると警告無しでビルドできた。
- 22 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:30:55 ]
- 処理系に依存するのか。。
- 23 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:05:21 ]
- VC++2005で "1.wav"などローカルに保存された音声ファイルを再生したいのですが。
標準でそういった関数?はあるのでしょうか?
- 24 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:23:59 ]
- PlaySound()なんていう便利なAPIがあるとか本気で思ってるの!?
- 25 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:39:49 ]
- >>20
g++ 4.0 では警告出たけどコンパイルできたよ。 もちろんリンクはできないけど。 定義するとリンクも通る。
- 26 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:45:11 ]
- >>24
ありがと。
- 27 名前:デフォルトの名無しさん [2008/02/28(木) 18:45:23 ]
- すいませんお願いします。
passing `const cell' as `this' argument of `double cell::cell_input(double)' discards qualifiers というエラーが出ます。 問題の行は IT->first.cell_input( OUTPUT*(IT->second) ); でITは map<cell,double >::iterator IT; です。 やりたいことはclass cellのオブジェクトA内のpublic関数から 別のオブジェクトB内のpublic関数にアクセスすることです。
- 28 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:53:14 ]
- >>27
map<cell,double > のcellはconstで修飾されてる。 IT->first.cell_input・・・・ cell::cell_input(double);が非constメンバー関数なんじゃないの?
- 29 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:02:46 ]
- C++の質問です。
コンパイラはbccを使用しています。 別のcppファイルで定義した配列をexternしたいのですが、 "外部シンボルが未解決です"というリンクエラーがでます。 data.cpp const char namber[5] = { 1, 2, 3, 4, 5 }; show.cpp extern char namber[]; リンクエラーを解決する方法を教えて頂けないでしょうか? よろしくお願いします。
- 30 名前:デフォルトの名無しさん [2008/02/28(木) 19:05:53 ]
- >>28
ありがとうございます! 非constメンバー関数、で検索かけて調べてみます!
- 31 名前:27 [2008/02/28(木) 19:17:50 ]
- すいません。。
調べましたがmapに放り込んだ時点でconst cellになってしまうから もし非constメンバ関数からconstメンバ関数に変えられない場合 私がやりたいことは出来ないということでしょうか? cell_ouputは非constメンバ関数でありデータメンバを書き換えます。
- 32 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:23:26 ]
- >>31
残念ながらmapのキーはconstだからキーのオブジェクトは 変更できない。他の手段を考えたほうがいいかも。 とにかくcellはconstオブジェクトだから非constメンバー関数 は呼び出せない。
- 33 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:25:20 ]
- >>31
変更する部分をまとめてpimplにするとかはどうよ?
- 34 名前:27 [2008/02/28(木) 19:26:18 ]
- >>32
まいった。ありがとうございます。 無理やりmap<mutable cell,double >::iterator IT; とか書いてみたけど無理っぽかったです。 他の手段か・・重ねてありがとう。
- 35 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:29:49 ]
- >>34
mutable使うならメンバーに あまり好きではないけど
- 36 名前:27 [2008/02/28(木) 19:35:30 ]
- >>33
pimplちょっと調べてみたんですが難しくて・・覚えておきます、ありがとう。 >>35 メンバー関数の先頭にはmutable付けられなかったです。 変更されることになるデータメンバの先頭につけてみたけど変わらず・・。
- 37 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:40:31 ]
- >>36
mutableデータメンバはconstメンバ関数から変更できる
- 38 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:41:02 ]
- >>36
mutableを非staticなメンバーに指定すれば、constメンバー関数内で 変更できるはずだけど。
- 39 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 21:27:49 ]
- pair の vector コンテナじゃ駄目ですか><
- 40 名前:デフォルトの名無しさん [2008/02/28(木) 21:41:36 ]
- 前レス >944
すいません。前回ポインタの格納場所について質問したものですが お礼を言うのを忘れていました。 ありがとうございます。
- 41 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:08:50 ]
- >>34
キーがconstなのは、キーでソートされるからであって、 mapに格納したまま書き換えたら順序を守れなくなる。 一旦mapから削除して、書き換え後に再度insertすべきでは?
- 42 名前:sage [2008/02/28(木) 22:21:56 ]
- 質問します。たったこれだけのコードが動きません。
ポインタのポインタを使ってみたのですが。教えてくだされ。 #include <stdio.h> #include <string.h> const char* string; const char** address; char str[1024]; void inputadd(const char* stradd){ address=&stradd; } void inputstr(void){ char teststr[]="abcdefghijklmn"; strcpy(str,teststr); *address=str; } void main(void){ string=NULL; inputadd(string); inputstr(); printf(string); }
- 43 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:24:24 ]
- >>42
address=&stradd; ←これがダメ straddはinputadd内のローカル変数だ。 関数を抜けると無くなるので、addressはトンでもないところを指すことになる。
- 44 名前:29 mailto:sage [2008/02/28(木) 22:30:58 ]
- 自己解決しました(。。)゛
分割コンパイルを行わないといけないのですね。 記述にばかり目を奪われておりましたが、 やっと問題点に気がつきました。 レスが無いのも納得がいきます。 それでは。
- 45 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:31:03 ]
- >>43
サンクス。ポインタは引数なら直でいけるという思い込みだったわ。 関数内で使っているものはポインタの値のコピーに過ぎないわけだな。 下みたいにして乗り切ったが正解でいいんだよな? void inputadd(const char** stradd){ address=stradd; }
- 46 名前:デフォルトの名無しさん [2008/02/28(木) 22:39:56 ]
- 初心者は、newやポインタを使わない方がいい
STL使えばすべて片付く
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:43:40 ]
- 使わなければいつまで経っても初心者だ。
練習コードなんだから、なんでもやってみればいい。 >>45 OK
- 48 名前:デフォルトの名無しさん [2008/02/28(木) 23:03:04 ]
- 上級者もnewやポインタを使わない方がいい
使うのは、速度やサイズの気になる場面だけだ それまで気になるならアセンブラにする
- 49 名前:デフォルトの名無しさん [2008/02/28(木) 23:04:10 ]
- 極論するとC言語は使わない方がいい
- 50 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:19:17 ]
- 極論するとプログラミングなんかしない方がいい
- 51 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:47:12 ]
- 速度が気になるんだったら、newを使うのはいけないと思うんだ。
少なくとも考えなしに使うのは。
- 52 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:12:20 ]
- boost::Pool
- 53 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:27:58 ]
- >>51
実測もせずに new を避けるのも良くない。
- 54 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:16:43 ]
- 結局のところ重複はこっちでいいんかい?
- 55 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 06:28:30 ]
- >>53は受け売りでしゃべっているだけですから気にしないでください。
- 56 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:16:31 ]
- newのなにがいけないのだろうか?
動的にオブジェクトの生成をしたらだめ?
- 57 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:02:47 ]
- 馬鹿?馬鹿なの?ねえ?
あえてだめっていう理由があるとしたらオーバーヘッドだろうか、ログ読んでないからなんともいえないが
- 58 名前:27 [2008/02/29(金) 11:39:19 ]
- >>37,38,39,41
昨日は急用で落ちてしまいました27です。 >mutableを非staticなメンバーに指定すれば、constメンバー関数内で 変更できるはずだけど。 を実践したところコンパイル通りました! constとかややこしくて触らないようにしてたんですけど これからちょこっと勉強してみようと思います みなさんありがとうございました!!
- 59 名前:デフォルトの名無しさん [2008/02/29(金) 12:10:15 ]
- 基本的に動的確保は頻繁にやるべきではない
不安定になる
- 60 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:16:40 ]
- >>59
動的確保が悪いんじゃない。正しく扱わないプログラマが悪いんだ。 C++ なら、 new したらすぐ auto_ptr なりに突っ込んどくとか、 new [] したくなったら標準コンテナを使うとか、そういう正しい対処をしとけば ミスもほとんど防げる。 原因も把握せずに「不安定になる」とか言ってプログラムの手段を 制限するのは得策じゃないね。
- 61 名前:デフォルトの名無しさん [2008/02/29(金) 12:24:44 ]
- あらかじめ必要な領域を見積もって確保すべき
for(n=0;n<100000;n++) str+="A"; などは解放確保を繰り返し良くない
- 62 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:29:33 ]
- reserve 使っておけばいいし
- 63 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:45:50 ]
- 本業はWEBアプリ屋なんですが、必要に迫られてActiveXの開発することになったC++ド素人です。
環境はVS2008、作ろうとしてるモノはMFC ActiveXです。 内部で文字列の暗号化処理(Blowfish)をしたいのですが、以下のソースを書いてコンパイルも 一応通ったものの、案の定うまく動きません。 LPSTR lpszPassword; //パスワード LPTSTR lpszInputStr;//暗号前文字列 //↑に値を適当にセットした上で↓ UCHAR digest[16]; MD5String(lpszPassword, digest); CBlowFish bf; bf.Initialize(digest, sizeof(digest)); unsigned char* outBuf = (unsigned char*)malloc(sizeof(lpszInputStr)); // エンコード bf.Encode((unsigned char*)lpszInputStr, outBuf, sizeof(lpszInputStr)); printf("%S", outBuf) よくわからなくて、ググりつつ適当に書いたソースなのでめちゃくちゃだと思います。 最終的には暗号化されたMD5ハッシュ値のような感じの文字列が出力されることを期待 していたのですが、バケバケな上入力値を変えても同じ値が返ってきますw 若干お手上げなので、皆さんのお知恵を拝借ください
- 64 名前:63 mailto:sage [2008/02/29(金) 13:49:43 ]
- ちなみに、BlowfishのソースはJim Congerさんが書いたのそのままです。
↓ここから持ってきました。 www.schneier.com/blowfish-download.html
- 65 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:56:07 ]
- waveファイルを再生しようと思い、playsound()というAPIがあるよ、と教えて貰ったので
調べてみたのですが、 VC++2005 #include <mmsystem.h> // PlaySound()のため #pragma comment(lib,"winmm") #define FILENAME "Windows XP Startup.wav" LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch(uMsg){ case WM_DESTROY: PostQuitMessage(0); return 0; case WM_LBUTTONDOWN: //再生 PlaySound(FILENAME,NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); return 0; case WM_RBUTTONDOWN: //停止 PlaySound(NULL,NULL,0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lParam); } このようなサンプルを見つけたのでコンパイルしてみたのですが、 error C2065: 'CALLBACK' : 定義されていない識別子です。 error C2065: 'DRIVERPROC' : 定義されていない識別子です。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません なぜでしょうか?
- 66 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:57:41 ]
- >>65
#include <windows.h>
- 67 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:14:23 ]
- >>66
ありがとうございます。ですが、まだエラーが出てしまいます>< VC++2005 #include <windows.h> #include <mmsystem.h> // PlaySound()のため #pragma comment(lib,"winmm") #define FILENAME "Windows XP Startup.wav" LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch(uMsg){ case WM_DESTROY: PostQuitMessage(0); return 0; case WM_LBUTTONDOWN: //再生 PlaySound(FILENAME,NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); return 0; case WM_RBUTTONDOWN: //停止 PlaySound(NULL,NULL,0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lParam); } error C2664: 'PlaySoundW' : 1 番目の引数を 'const char [23]' から 'LPCWSTR' に変換できません
- 68 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:17:28 ]
- #define FILENAME TEXT("Windows XP Startup.wav")
- 69 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:28:38 ]
- >>68
ありがとうございます。&重ね重ねすいません。まだ駄目みたいです。 error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。 fatal error LNK1120: 外部参照 1 が未解決です。
- 70 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:33:19 ]
- エラーメッセージでぐぐれ
- 71 名前:デフォルトの名無しさん [2008/02/29(金) 14:33:42 ]
- #include <windows.h>
#include <mmsystem.h> #pragma comment(lib,"winmm.lib") main(){ PlaySound("C:\\WINDOWS\\system32\\oobe\\images\\clickerx.wav", NULL,SND_FILENAME | SND_ASYNC | SND_LOOP); Sleep(2000); PlaySound(NULL,NULL,0);}
- 72 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:35:57 ]
- >>69
main関数がないのに動くわけないだろう
- 73 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:38:11 ]
- >>70
int main を追加する方法や システム>サブシステムをwindowにする方法 エントリポイントにMainを追加してみたりは試した上で質問はしました。。><
- 74 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:49:57 ]
- VCだよね?mainをこう書いてみたら?
int APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpCmd, int nCmd) { ... } あとWindowProcを呼ばせるにはちゃんとウィンドウを作って、 メッセージ処理しないとだめだと思うぞ。
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:59:41 ]
- >>72
書き終わった直後に気付いて書いてみたのですが根本的な原因は別にあるようでした。 >>74 そうみたいです!。ありがとうございます。 >>71 これに、文字セットをマルチバイトにしてみたところ。うまくいったので、これをベースにして、考えているプログラムにしてみたいと思います。 みなさんお付き合い頂いてありがとうございました。
- 76 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:06:52 ]
- >>63
>unsigned char* outBuf = (unsigned char*)malloc(sizeof(lpszInputStr)); 俺unix屋だから windows のこと詳しくないけど lpszInputStr は LPTSTR だからポインタだと思うよ。 上のコードのしていることは文字列の分ではなく ポインタのサイズの分をmallocで確保している。多分4バイトくらい。 まず文字列のバイト数を正しく求めることから始めないといけないんじゃないかな。 size_t size_of_in = sizeof(TCHAR) * (lstrlen(lpszInputStr)+1); // NUL 文字に+1文字分 あと outBuf には暗号化されたバイナリが入るだろうから printf("%S") ではうまく表示されないと思うよ。バイナリで扱わないと。 他にも暗号化単位やバイトオーダーなども問題になるかもしれないよ。
- 77 名前:63 mailto:sage [2008/02/29(金) 16:02:41 ]
- >>76
ども、ありがとうございます。 PHPやASPな人間なもんで、厳密な型変換やったことないんでさっぱりです。 バイナリを文字列(1-9,a-z.A-Z)に戻すのは、どうすればいいんでしょうか。
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:04:03 ]
- newってそんなに遅いの?
- 79 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:08:03 ]
- その程度のオーバーヘッドも看過できないような状況では十分に「遅い」。
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:21:26 ]
- まぁ、何を作ってるか、によるよね。
趣味でLisp方言作ってたときは、operator new()を工夫しただけで全体の動作が3割速くなったし。
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:33:06 ]
- >>79
boost::Poolのほうが断然速かった。
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:23:19 ]
- >>78
メモリマネージャ次第じゃね? Windowsに限ってもVCとBCBじゃnewでもメモリ確保の仕方違うし。
- 83 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:15:19 ]
- newを忌避しすぎるのも意味が無い。「まだ最適化するな」。
- 84 名前:デフォルトの名無しさん [2008/03/01(土) 01:01:15 ]
- 初期化方法おしえてください 全部通りません
vector<int> x={1,2,3}; vector<int> x(3,{1,2,3}); vector<int> x({1,2,3});
- 85 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:04:48 ]
- >>84
static int const initial_x = {1,2,3}; vector<int> x(&initial_x[0], &initial_x[3]);
- 86 名前:85 mailto:sage [2008/03/01(土) 01:05:36 ]
- ごめん。 [] が抜けてた。
static int const initial_x[] = {1,2,3};
- 87 名前:デフォルトの名無しさん [2008/03/01(土) 01:08:49 ]
- そういうやり方しかないですか・・・そしたらint x[]={1,2,3}ですませます
すみません
- 88 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:16:29 ]
- #include <boost/assign/std/vector.hpp>
... vector<int> v; v += 3, 1, 4;
- 89 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:16:34 ]
- boost::assignとか
- 90 名前:89 mailto:sage [2008/03/01(土) 01:16:55 ]
- ごめんリロードしてなかった
- 91 名前:デフォルトの名無しさん [2008/03/01(土) 01:21:24 ]
- vectorに関数追加する方法ありませんか?
x={1,2,3}の代入を可能にする関数です
- 92 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:23:37 ]
- 配列数が8000ぐらいあるものでそれぞれが4つくらいのアイテムを持っている場合、
vectorやらmapやらを使いたいんですが、メモリ消費や処理速度的にどのようにしたらよいでしょうか? ちなみに8000くらいあるほうは歯抜けで番号が記録されていてコール元から頻繁にアイテムを求めてきます。(ユニークキー) 4つくらいのアイテムの方は可変になってしまうのでそれぞれをvectorにしようかと思ったのですが、 消費メモリが大きくなりそうだったので悩んでいます。
- 93 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:23:45 ]
- >>91
継承すれば
- 94 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:24:00 ]
- ありません
- 95 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:35:05 ]
- >>92
「なりそう」で悩む前に素直に実装してみて、実際のメモリ消費量見てから考えるのがいいよ。
- 96 名前:デフォルトの名無しさん [2008/03/01(土) 01:44:11 ]
- vec x(10, 10, 10, 0);
で初期値0の3次配列を定義できるようにするには、どう書けばいいですか? int 型限定でよいです 4次や5次もしたいです
- 97 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:45:17 ]
- >91
無理。C++0x を待て。
- 98 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:46:56 ]
- >>95
ありがとうございます。 ちょっと試してみます。 業務で初めてC++使っているので勉強の毎日です。><
- 99 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:53:25 ]
- >>96
コンストラクタ多重定義しとけば。
- 100 名前:デフォルトの名無しさん [2008/03/01(土) 01:56:57 ]
- このように書けば可変個の引数をとれますが、内部の型が一つに決まってしまって変更できません
どうすればいいですか? class vec{ int x; public: vec(int n, ...){} };
|

|