【初心者歓迎】C/C++室 Ver.59【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/09/06(土) 22:45:12ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.58【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1218023777/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
0002デフォルトの名無しさん
2008/09/06(土) 22:47:350003デフォルトの名無しさん
2008/09/06(土) 22:57:39VC++ Express 2008は、C言語サポートがしょぼくて・・・。
リファクタリングとか、関数のテンプレートとか作れたり出来るとうれしいんですが
0004デフォルトの名無しさん
2008/09/06(土) 22:59:040005デフォルトの名無しさん
2008/09/06(土) 23:01:39#define new ::new(_T(__FILE__), __LINE__)
ってやってるんだが、
placement newを使いたいときはどうしたらいい?
0006デフォルトの名無しさん
2008/09/06(土) 23:03:35// ウィンドウクラスを登録
// ウィンドウクラスを登録する
// ウィンドウクラスを登録する。
// ウィンドウ・クラスを登録
// ウィンドウ・クラスを登録する
// ウィンドウ・クラスを登録する。
// ウィンドウのクラスを登録
// ウィンドウのクラスを登録する
// ウィンドウのクラスを登録する。
0007デフォルトの名無しさん
2008/09/06(土) 23:06:360008デフォルトの名無しさん
2008/09/06(土) 23:07:440009デフォルトの名無しさん
2008/09/06(土) 23:08:13/* ウィンドウクラスを登録
BOOL RegisterWindowClass()
{
〜〜〜
}
*/
0010デフォルトの名無しさん
2008/09/06(土) 23:09:40生半可な知識もここまで来ると笑えるな。
0011デフォルトの名無しさん
2008/09/06(土) 23:10:390012デフォルトの名無しさん
2008/09/06(土) 23:13:26関数名で処理が自明なものにコメントは不要だよ。What じゃなくて、
Why を書くようにしたほうがいいね。
00135
2008/09/06(土) 23:18:18http://ml.tietew.jp/cppll/cppll/thread_articles/9887#ar9888
これでやってみる
0014デフォルトの名無しさん
2008/09/06(土) 23:18:450015デフォルトの名無しさん
2008/09/06(土) 23:24:030016デフォルトの名無しさん
2008/09/06(土) 23:26:230017デフォルトの名無しさん
2008/09/06(土) 23:27:260018デフォルトの名無しさん
2008/09/06(土) 23:29:26/// ほげほげな関数
/// </summary>
0019デフォルトの名無しさん
2008/09/06(土) 23:34:35C++だとあんまり役に立たないだろ。
0020デフォルトの名無しさん
2008/09/06(土) 23:35:370021デフォルトの名無しさん
2008/09/06(土) 23:41:31Regist という英単語はない
0023デフォルトの名無しさん
2008/09/06(土) 23:46:29そんなマクロは捨てて auto_ptr なり scoped_ptr, shared_ptr なりのスマートポインタを使う。
0024デフォルトの名無しさん
2008/09/07(日) 00:02:15RECT* SetRect(RECT* pDst, int x, int y, int width, int height) {
pDst->left = x;
〜
}
みたいなアサイン補助関数があるじゃないですか。
こういう関数は戻り値でデスティネーションを返して、
if(xend > SetRect(〜)->right) みたいな使い方ができるように
なってますが、この戻り値って*で返すのと&で返すのと
どちらにするべきなんでしょうね?
どちらかに統一した方が見た目がすっきりしそうなのですが。
0025デフォルトの名無しさん
2008/09/07(日) 00:04:33&で受け取るなら&で返す
のがわかりやすいのではないか
0026デフォルトの名無しさん
2008/09/07(日) 04:52:27SHA-1 のコリジョンの起こるサンプルデータを探しています.
ググってみると MD5 の方はすぐに見つかったのですが,SHA-1 の方は衝突記事はたくさん引っ掛るのですが,
肝心のデータが見つかりません.どこにあるか知っていたら教えていただけないでしょうか?
0027デフォルトの名無しさん
2008/09/07(日) 10:54:48002826
2008/09/07(日) 12:08:32ごめん,ぶっちゃけ どのスレで聞いたら良いか分からなかったんだ.
あと RFC についてた MD5 と SHA-1 アルゴリズムのサンプルが C で書かれていたから,
このスレが比較的適当かと思ったんだ….
あの後調べてたんだけど SHA-1 で見つかったコリジョンは計算回数を減らした奴で,完全版のほうは
コリジョンハッシュを生成する比較的現実的な計算量のアルゴリズムが見つかっただけなのかな?
それともアルゴリズムが改良されてもう見つかっている?ここらへんがよくわからんとです….
0029デフォルトの名無しさん
2008/09/07(日) 12:11:210030デフォルトの名無しさん
2008/09/07(日) 12:15:37(32bitCPUで、intの和算、charの和算等)
もしそうであれば、前スレで64bitOSでも
doubleは64bit、floatは32bitってあるけど、
これも同じことがいえますか?
また、別件で、64bitOSでもintは32bitだったり64bitだったりとありますが、
intが32bitだとfloatと、64bitだとdoubleと共有したい場合、
何か方法ありませんか?
0031デフォルトの名無しさん
2008/09/07(日) 12:22:280032デフォルトの名無しさん
2008/09/07(日) 12:26:50int 以下の大きさの整数の演算は int に変換してから行う、と規格で決められている。
だから計算コストは同じ。読み取りと書き込みのコストは違うかもしれないけどね。
double, float についてはこういう規則は決められてないんで、同じことは言えない。
特定の環境に限って実験結果があれば別だけど。
別件については「共有」の意味がわからんので、なんとも。
0033デフォルトの名無しさん
2008/09/07(日) 12:27:18後者は共用体で。
0034デフォルトの名無しさん
2008/09/07(日) 12:36:36サンクス
共有は共有体(union)のことです
intのビットサイズがOSによって変わるなら
intが32bitの場合はfloatと、
intが64bitの場合はdoubleと共有体を組むべきだと思ったんですが
そのセオリーな方法はないのかと思いまして
0035デフォルトの名無しさん
2008/09/07(日) 12:40:50<stdint.h>あるいは<boost/cstdint.hpp>のint32_t/int64_t
0036デフォルトの名無しさん
2008/09/07(日) 12:43:14×共有体
○共用体
0037デフォルトの名無しさん
2008/09/07(日) 12:49:33typedef 一段かませばいいんじゃない?
どうやって int のビット数を判別するかは、環境依存のマクロがあればそれでもいいし、
C++ でテンプレートメタプログラミングしてもいい。
0038デフォルトの名無しさん
2008/09/07(日) 12:50:3332bitOSでも64bitに固定しろってことなんですかね?
せめてコンパイル環境によって
判定してくれるようなマクロを期待していたんですが
>>36
そうでした、お恥ずかしい
0039デフォルトの名無しさん
2008/09/07(日) 12:58:27#include <limits.h>
#if INT_MAX == 2147483647
0040デフォルトの名無しさん
2008/09/07(日) 13:09:20template<> struct FP<sizeof(float)>{ typedef float type; };
template<> struct FP<sizeof(double)>{ typedef double type; };
typedef FP<sizeof(int)>::type FPint;
0041デフォルトの名無しさん
2008/09/07(日) 13:21:49にゃるほど
>>37,40
テンプレートはクラスにしか使ったことなかったんですが
本来そういう使用方法だったんですね
メタプログラミングについて勉強してきます
ありがとうございました
0042デフォルトの名無しさん
2008/09/07(日) 13:50:40いや、メタプログラミングは本来の使い方じゃないからね。
ライブラリ実装内で使うならともかく、他人に使わせるようなところで使うのは控えたほうがいいよ。
0043デフォルトの名無しさん
2008/09/07(日) 14:55:030044デフォルトの名無しさん
2008/09/07(日) 15:04:32::func()という表記はグローバルスコープで宣言されたfuncを明示的に呼び出す場合に使用するものだったと思いますが
::new Hogeという風にnew演算子に対して::を付けている場合はどういう動きになるのでしょうか?
0045デフォルトの名無しさん
2008/09/07(日) 15:20:360046デフォルトの名無しさん
2008/09/07(日) 15:20:48■暗号技術【ROUNDsurea】■
ttp://pc11.2ch.net/test/read.cgi/tech/1180280982/
0047デフォルトの名無しさん
2008/09/07(日) 19:19:25フリーのリソースエディタ
ResEdit
http://www.forest.impress.co.jp/lib/stdy/program/progsupt/resedit.html
0048デフォルトの名無しさん
2008/09/07(日) 22:03:00これ以外のプロトタイプ形式とか経験ないのですが、なんか能率悪いと思う
0049デフォルトの名無しさん
2008/09/07(日) 22:22:000050デフォルトの名無しさん
2008/09/08(月) 17:41:04その場合、C++だと char* ch[] とか int* dt[] だけでは
storage size of `ch' isn't known (MinGW)のようにエラーになってしまうので、事前に配列を宣言しておくことができません。
なので、今回のように必要な数がプログラム実行時まで不明な同型のオブジェクトを動的に確保して、それらを一まとめにしておくには、配列ではなく次の要素へのポインタを格納したオブジェクトのリストを使うしかないでしょうか?
0051デフォルトの名無しさん
2008/09/08(月) 17:48:12mallocで必要なサイズの領域を確保すればいいんでない
0052デフォルトの名無しさん
2008/09/08(月) 17:50:460053デフォルトの名無しさん
2008/09/08(月) 18:00:420054デフォルトの名無しさん
2008/09/08(月) 18:05:10いいえ、std::vectorを使いましょう。
005550
2008/09/08(月) 18:06:43>>51
プログラム開始から終了の間に、順々に必要な要素数が増えていく感じなので、最初に一気にmalloc とか new int [10] とかではダメだったのです。
>>52
そーか、要素がpriority_queueのポインタでして、ポインタってvectorに格納できないと勝手に思いこんでたんですが、調べてたらポインタでも大丈夫なんですね。
vecotrでなんとかなりそうです。ありがとうございましたm(_ _)m
0056デフォルトの名無しさん
2008/09/08(月) 19:01:16#include <stdio.h>
int main(){
int a,b,c;
printf("足し算をします。計算する数字を2つ入力し下さい。\nなお数字の区切りには,を入力してください。\n");
scanf("&d , &d",&a,&b);
c=a+b;
printf("%d+%dは%dです。\n",a,b,c);
return 0;
}
何がいけないんですか?
0057デフォルトの名無しさん
2008/09/08(月) 19:13:59&d → %d
0059デフォルトの名無しさん
2008/09/08(月) 20:07:57「それは自分の望みとどう違うのか」くらいは書いてくれよ。
>>56のケースは、たまたまコトの次第がすぐ特定できる内容だからスムーズに行ったけども。
0060デフォルトの名無しさん
2008/09/08(月) 20:21:54すみません、今後気を付けます。
0061デフォルトの名無しさん
2008/09/09(火) 19:31:390062デフォルトの名無しさん
2008/09/09(火) 19:45:580063デフォルトの名無しさん
2008/09/09(火) 19:53:380064デフォルトの名無しさん
2008/09/09(火) 19:53:38ところでVirtualAllocなど種類がありますがどんな違いがありますか?
0065デフォルトの名無しさん
2008/09/09(火) 20:01:070066デフォルトの名無しさん
2008/09/09(火) 20:09:20http://konuma.txt-nifty.com/blog/2006/03/heapallocvirtua_5d49.html
・ HeapAlloc
異なるメモリブロックを多数作成するときに利用します。パフォーマンスを最大にしたい場合、
同じブロック長のみで構成したヒープハンドルを複数作成する必要があります。
・ VirtualAlloc
多量のデータを格納する空間を用意する必要があるが、一部は利用しないかもしれない場合に
重宝します(ハッシュテーブル等)。部分的に領域の確保を遅らせることが出来ます。
多量のメモリを確保する場合は基本的にこの関数に頼るべきです。
・ LocalAlloc/GlobalAlloc
どちらもWin16時代の名残です。Win32APIが要求しない限り、新規にこれを採用する理由はありません。
・ malloc (new)
データ長にあわせて、プロセスに既にあるヒープを使ったり、新たにヒープを作成したりします。
またマルチスレッドに対する耐性があるバージョンも存在し、賢いですが、その分最も遅いです。一般的には最後にHeapAllocを呼び出す結果になります。
0067デフォルトの名無しさん
2008/09/10(水) 08:46:260068デフォルトの名無しさん
2008/09/10(水) 12:38:43char *sh=new char[1024];
lstrcat(sh, "あいうえおかき");
printf("%s\n", sh);
delete sh;
0069デフォルトの名無しさん
2008/09/10(水) 12:47:08char *p=new char[1024];
strcpy(p,"あいうえ");
printf("%s\n", p);
delete p;
0070デフォルトの名無しさん
2008/09/10(水) 12:48:06lstrcatは文字列を末尾に結合する関数。
newで確保した領域の中身は不定。
だからlstrcatはsh内の最初の'\0'を探してその位置に"あいうえおかき"を挿入する。
予めsh[0]に'\0'を入れておけば意図どおりの動作はする。
0071デフォルトの名無しさん
2008/09/10(水) 12:50:53サンクス
0072デフォルトの名無しさん
2008/09/10(水) 13:50:46#include <windows.h>
#include <iostream>
using namespace std;
#define memsize 32400000
#define T GetTickCount()
int main(){ int s[4][3]; memset(s, 0, 48); for(int n=0;n<10;n++){
int cl=GetTickCount(); HANDLE hHeap = HeapCreate(NULL, 0, 0);
char *p0 = (char*) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, memsize);
cl=T-cl;s[0][0]+=cl; cl=T; memset(p0, 97, memsize);
cl=T-cl; s[0][1]+=cl; cl=T; HeapFree(hHeap, NULL, p0); HeapDestroy(hHeap);
cl=T-cl; s[0][2]+=cl;
cl=T; HANDLE hShare = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,0, memsize, "MEMTEST");
char *p1 = (char*)MapViewOfFile(hShare, FILE_MAP_ALL_ACCESS, 0, 0, memsize);
cl=T-cl; s[1][0]+=cl; cl=T; memset(p1, 97, memsize);
cl=T-cl; s[1][1]+=cl; cl=T; UnmapViewOfFile(p1); CloseHandle(hShare);
cl=T-cl; s[1][2]+=cl;
cl=T; char *p2 = (char*)VirtualAlloc(NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
cl=T-cl; s[2][0]+=cl; cl=T; memset(p2, 97, memsize);
cl=T-cl; s[2][1]+=cl; cl=T; VirtualFree(p2, memsize, MEM_DECOMMIT);
cl=T-cl; s[2][2]+=cl;
cl=T; char *p3=new char[memsize]; cl=T-cl; s[3][0]+=cl;
cl=T; memset(p3, 97, memsize); cl=T-cl; s[3][1]+=cl;
cl=T; delete p3; cl=T-cl; s[3][2]+=cl; }
printf("HeapAllocの速度の合計 確保%d コピー%d 解放%d\n",s[0][0],s[0][1],s[0][2]);
printf("FileMappingの速度の合計 確保%d コピー%d 解放%d\n",s[1][0],s[1][1],s[1][2]);
printf("VirtualAllocの速度の合計 確保%d コピー%d 解放%d \n",s[2][0],s[2][1],s[2][2]);
printf("newの速度の合計 確保%d コピー%d 解放%d \n",s[3][0],s[3][1],s[3][2]);}
007372
2008/09/10(水) 14:01:240074デフォルトの名無しさん
2008/09/10(水) 14:07:370075デフォルトの名無しさん
2008/09/10(水) 14:25:45007672
2008/09/10(水) 14:27:12#include <windows.h>
#include <iostream>
using namespace std;
#define memsize 200000000
int main(){
for(int n=1;n<100;n++){
printf("%d回目の確保\n",n);
char *q = (char*)VirtualAlloc(NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
q[memsize-1]=0; VirtualFree(q, memsize, MEM_DECOMMIT);
HANDLE hd = HeapCreate(NULL, 0, 0);
char *p = (char*) HeapAlloc(hd, HEAP_ZERO_MEMORY, memsize);
if(p==NULL){cout<<"err\n";return -1;} p[memsize-1]=0;
HeapFree(hd, NULL, p); HeapDestroy(hd);}}
0077デフォルトの名無しさん
2008/09/10(水) 14:28:120078デフォルトの名無しさん
2008/09/10(水) 14:32:2410回行かないだろ
言語のまえにバソポンについて勉強汁
007972
2008/09/10(水) 14:33:12VirtualFree(q, memsize, MEM_DECOMMIT);を
VirtualFree(q, 0, MEM_RELEASE);にしたら成功しました。
でも、コミット解除と、領域解放の違いがわかりません。
008072
2008/09/10(水) 14:40:54コミット解除は、NTFSをOSが管理できないFormatと見なすようなものですか?
0081デフォルトの名無しさん
2008/09/10(水) 14:46:47説明すると長くなるからMSDNのメモリ管理に関する項目読んで。
008272
2008/09/10(水) 15:05:56みてみたのですがわかりませんでした。
別々のメモリを確保して、ハンドルも取得したい場合は、hdとheはどのように求めればいいですか?
char *p = (char*)VirtualAllocEx(hd, NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
char *q = (char*)VirtualAllocEx(he, NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
0083デフォルトの名無しさん
2008/09/10(水) 15:09:41あと、CreateFileMapping(INVALID_HANDLE_VALUE,・・・)はVirtualAllocExと同じですか?
メインメモリ。仮想記憶のどこかに確保されて性能に違いはありませんか?
0084デフォルトの名無しさん
2008/09/10(水) 15:11:530085デフォルトの名無しさん
2008/09/10(水) 15:38:40#include <windows.h>
#include <iostream>
using namespace std;
int main(){
printf("HeapAllocのメモリ確保耐久テスト\n");
unsigned int size=200000000; while(1){
HANDLE hd = HeapCreate(NULL, 0, 0);
char *p = (char*) HeapAlloc(hd, HEAP_ZERO_MEMORY, size);
if(p==NULL){printf("エラーサイズ = %d\n",size);break;}
size*=1.05; HeapFree(hd, NULL, p); HeapDestroy(hd);}
printf("\nVirtualAllocのメモリ確保耐久テスト\n");
size=200000000; while(1){
char *q = (char*)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
if(q==NULL) {printf("エラーサイズ = %d\n",size);break;}
size*=1.05; VirtualFree(q, 0, MEM_RELEASE);}
printf("\nCreateFileMappingのメモリ確保耐久テスト\n");
size=200000000; while(1){
HANDLE hShare = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,0,size, "MEMTEST");
char *r = (char*)MapViewOfFile(hShare, FILE_MAP_ALL_ACCESS, 0, 0, size);
if(r==NULL) {printf("エラーサイズ = %d\n",size);break;}
size*=1.05; UnmapViewOfFile(r); CloseHandle(hShare);}
printf("\nnewのメモリ確保耐久テスト\n");
size=200000000; while(1){
char *s=new char[size];
if(s==NULL) {printf("エラーサイズ = %d\n",size); break;}
else printf("成功サイズ = %d\n",size);
size*=1.05; delete s;}}
0086デフォルトの名無しさん
2008/09/10(水) 15:42:26醜い
0087デフォルトの名無しさん
2008/09/10(水) 16:49:38動作がおそくなります。 物理メモリの確保サイズはせいぜい300Mという所とおもいます。
300M以上の場合、メモリや仮想メモリを使わずに、ファイルにマッピングしたいと思います。
アロケータというのを聞きますが、newやSTLを自前で管理するにはどうしたらいいですか?
0088デフォルトの名無しさん
2008/09/10(水) 16:59:53アロケータは3番目のテンプレート引数に指定できる
0089デフォルトの名無しさん
2008/09/10(水) 17:19:32どうしたらいいですか
0090デフォルトの名無しさん
2008/09/10(水) 17:21:59以下、該当ソースです。
typedef struct taghoge {
int val1;
union {
struct {
int val2_1_1;
int val2_1_2;
} val2_1;
struct {
long val2_2_1;
} val2_2;
} val2;
} hoge;
template <typename T> const char* func(T& temp) { return typeid(temp).name(); }
void main() {
hoge h;
printf("h = %s\n", func(h));
printf("h.val1 = %s\n", func(h.val1));
printf("h.val2 = %s\n", func(h.val2));
printf("h.val2.val2_1 = %s\n", func(h.val2.val2_1)); // 1: OK
printf("h.val2.val2_2 = %s\n", func(h.val2.val2_2)); // 2: NG
}
1の箇所はコンパイルも実行もできます。2の箇所はコンパイルできません。
エラーは「error C2664: 'func' : 1 番目の引数を '' から '&' に変換できません。」とでます。
なぜこのようなコンパイルエラーになるのでしょうか。
環境は VC++2005 ExpressEdition + SP1 です。
009190
2008/09/10(水) 17:25:57つけないで通す方法と、なぜ通らないかが理解したい箇所です。
0092デフォルトの名無しさん
2008/09/10(水) 17:27:50どういうキーワードでググッた?
0093デフォルトの名無しさん
2008/09/10(水) 17:42:57そんなことしたって速くならないよ。
それで速くなるならアプリはみんなそうするし、メモリを何Gも積む奴もいない。
0094デフォルトの名無しさん
2008/09/10(水) 17:59:03アロケータ、STLなどです。
>>93
他のOSなどのメモリを食い尽くさないためです。
実メモリが無くなれば他のソフトにまで影響が出ます。
0095デフォルトの名無しさん
2008/09/10(水) 18:30:222008 SP1では通ったぞ
規格的に適合してるかは知らん
0096デフォルトの名無しさん
2008/09/10(水) 18:46:280097デフォルトの名無しさん
2008/09/10(水) 18:47:060098デフォルトの名無しさん
2008/09/10(水) 18:49:020099デフォルトの名無しさん
2008/09/10(水) 18:58:450100デフォルトの名無しさん
2008/09/10(水) 19:10:23int main() {
char temppath[300], tempfile[300];
GetTempPath(300, temppath);
GetTempFileName(temppath,"mem",0,tempfile);
HANDLE fp=CreateFile(tempfile, GENERIC_READ|GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 );
int size=1000000000;
LockFile(fp,0,0,size,0);
HANDLE mp=CreateFileMapping( fp, 0, PAGE_READWRITE|SEC_COMMIT, 0, size, "memtest");
char *q=(char*) MapViewOfFile( mp, FILE_MAP_ALL_ACCESS, 0, 0, 0);
q[size-1]='a';
UnmapViewOfFile(mp);
UnlockFile(fp,0,0,size,0);
CloseHandle(fp);}
0101デフォルトの名無しさん
2008/09/10(水) 19:23:31何の目的かわからないけどWinならスパースファイルを作ればいい。
見せ掛けだけだからディスク容量は減らないが。
0102デフォルトの名無しさん
2008/09/10(水) 19:25:34gcc
0103デフォルトの名無しさん
2008/09/10(水) 20:09:44それで検索して一番目に作り方と使い方の説明ページが出てくるけど。
そのページでさっぱり分からないとなると、
ここで聞いても無駄だと思う。
レスで書ける文字数的に。
具体的にどこが分からないか書けばアドバイスしてくれる人も居るかもしれないけどね。
0104デフォルトの名無しさん
2008/09/10(水) 21:39:44Winの場合、適当にファイル作ってファイルポインタを1GBの位置に移動、
ファイル終端をそこに設定すればいける
0105デフォルトの名無しさん
2008/09/10(水) 21:40:580106デフォルトの名無しさん
2008/09/10(水) 21:46:35クラスを3つほど作り
数を入力して、もともと設定されている数と計算をし、
他のクラスの数から引いて、表示する
ってのを作るにはどうしたらいいですか?
0107デフォルトの名無しさん
2008/09/10(水) 21:49:34宿題スレでもいくといいよ
0108デフォルトの名無しさん
2008/09/10(水) 21:53:35宿題じゃなくて、宿題を片付けるための試しのプログラムだから・・・OTL
0109デフォルトの名無しさん
2008/09/10(水) 22:13:28宿題スレでもいくといいよ
0110デフォルトの名無しさん
2008/09/10(水) 22:15:130111デフォルトの名無しさん
2008/09/10(水) 23:36:21mainで、
int card[4][13];
char *mark[4]={"H","D","C","S"};
char *number[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
と宣言して、これを関数の中でも使いたいときってどうすればいいの?
例えば関数Aで使いたいとしたら
void A( )
{
}
で( )の中には何をいれればいいんですか?
0112デフォルトの名無しさん
2008/09/10(水) 23:40:490113デフォルトの名無しさん
2008/09/10(水) 23:47:07と
char *mark[4]={"H","D","C","S"};
char *number[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
で違う
後者は>>112の通り
前者はint x[][13]とかint (*x)[13]とか
0114デフォルトの名無しさん
2008/09/10(水) 23:47:350115デフォルトの名無しさん
2008/09/10(水) 23:48:53A(card, mark, number);
0116デフォルトの名無しさん
2008/09/10(水) 23:51:06エラー E2176 ted.cpp 14: 宣言に型が多すぎる
エラー E2193 ted.cpp 50: 呼び出し時のパラメータが足りない:M::Attacked(Kougeki)(関数 main() )
となって上手くいきません
指摘お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7709.txt
0117111
2008/09/10(水) 23:55:16ありがとうございました!
できました!!
0118デフォルトの名無しさん
2008/09/11(木) 00:01:51class Kougeki
{
(中略)
}; ←ここにセミコロン
m.Attacked(); ←Kougeki型の変数を渡さないといけない
0119デフォルトの名無しさん
2008/09/11(木) 00:06:45^^;
0120デフォルトの名無しさん
2008/09/11(木) 00:08:41m.Attacked();
↓
m.Attacked(s.Attack());
かなあ?どうしたいのかよくわからないので何ともいえないけど。
0121116
2008/09/11(木) 00:09:26ありがとうございました!
0122デフォルトの名無しさん
2008/09/11(木) 00:22:000123デフォルトの名無しさん
2008/09/11(木) 06:25:22getばかりでsetの概念が飛んでる。
012490
2008/09/11(木) 07:07:34VC++2005 ExpressEdition + SP1 ではコンパイルエラーが出るようです。
コンパイラが対応していない記述方法が原因という理解をしました。
ありがとうございました。
0125デフォルトの名無しさん
2008/09/11(木) 07:09:52あの糞なBCC(5.9.3)でもまともに走るぞ。
バグじゃね?
0126デフォルトの名無しさん
2008/09/11(木) 07:28:440127デフォルトの名無しさん
2008/09/11(木) 09:29:380128デフォルトの名無しさん
2008/09/11(木) 09:41:550129デフォルトの名無しさん
2008/09/11(木) 18:04:41結果用の引数に入れて返すにはどうしたらいいですか?
void CopyPtr(int* in, int* out)
{
out = in;
}
void main()
{
int* in;
int* out;
*in = 10;
CopyPtr(in,out);
cout << *out << endl;
}
0130デフォルトの名無しさん
2008/09/11(木) 18:08:02{
out = in;
}
0131デフォルトの名無しさん
2008/09/11(木) 18:08:21void CopyPtr(int* in, int** out)
{
*out = in;
}
.....
CopyPtr(in, &out);
.....
0132デフォルトの名無しさん
2008/09/11(木) 18:24:34できたぁ〜ありがとん!
0133デフォルトの名無しさん
2008/09/11(木) 18:35:56あとBCCFormで.rcと.hは作りました。
どうすればいいか教えてください。
あとフリーのリソースエディタで皆さんがいいと思うものを教えてください。
ttp://www2.uploda.org/uporg1664738.zip
0134デフォルトの名無しさん
2008/09/11(木) 18:43:21ボタンのコントロールIDを IDOK や IDCANCEL にすればよい
0135デフォルトの名無しさん
2008/09/11(木) 18:51:17できました!
ありがとうございます。
あとBCCFormでリソースファイルを作成すると、include <windows.h>が作成されないんですけどほかのソフトのほうがいいでしょうか?
ちょっと使いにくいかなと思って。
0136デフォルトの名無しさん
2008/09/11(木) 20:07:39それはBCCがリソースコンパイルにwindows.hを必要としないが故の仕様
0137デフォルトの名無しさん
2008/09/11(木) 22:59:31DLLとEXEが提供されているプログラムがあり、
メモリ (DLLのみ) かファイルを渡して処理(or出力ファイル)を返すのですが
ファイルを渡した方が省メモリになりますよね?
この場合、ファイルが1Gあったとしてはじめの100Mだけ渡したい場合はどうすればいいですか?
0138デフォルトの名無しさん
2008/09/11(木) 23:02:44メモリに格納すれば、書き込むコストが無くせますが、100M分余計にメモリを食います。
相手のプログラムがその100Mを作業領域に使ってくれればかまわないのですがその保証はありません。
0139デフォルトの名無しさん
2008/09/11(木) 23:04:160140デフォルトの名無しさん
2008/09/11(木) 23:04:460141デフォルトの名無しさん
2008/09/11(木) 23:06:32という風にです。 標準ではプロンプトに出力が出ますが -o outputfileなども書けます。
0142デフォルトの名無しさん
2008/09/11(木) 23:08:33たとうばchar[]でいうと\0を途中にいれるような方法です。
0143デフォルトの名無しさん
2008/09/11(木) 23:09:580144デフォルトの名無しさん
2008/09/11(木) 23:11:28処理が終わったら、また1Gに戻すような方法はありますか?
0145デフォルトの名無しさん
2008/09/11(木) 23:12:48じゃ、メモリを渡すってのは?
0146デフォルトの名無しさん
2008/09/11(木) 23:14:440147デフォルトの名無しさん
2008/09/11(木) 23:14:510148デフォルトの名無しさん
2008/09/11(木) 23:17:04コピーすれば、処理後は削除するだけで良いとは思いますけど・・・
でもコピーのコストが掛かるのが嫌なんです。
0149デフォルトの名無しさん
2008/09/11(木) 23:20:49HDD、メモリの物理的な動作は必要なく、一瞬で済むはずです。
戻すのも一瞬です。 教えてください。
0150137
2008/09/11(木) 23:26:230151デフォルトの名無しさん
2008/09/11(木) 23:26:500152デフォルトの名無しさん
2008/09/11(木) 23:30:090153デフォルトの名無しさん
2008/09/11(木) 23:30:10でもこれだと、exeしか提供されていない場合は出来ません。
exeでも出来る方法はありませんか
0154デフォルトの名無しさん
2008/09/11(木) 23:36:510155デフォルトの名無しさん
2008/09/11(木) 23:39:380156デフォルトの名無しさん
2008/09/11(木) 23:39:51exeはファイルしか入力できないので、そのままだと1G全部処理してしまいます。
なんとかなりますか?
0157デフォルトの名無しさん
2008/09/11(木) 23:43:230158デフォルトの名無しさん
2008/09/11(木) 23:48:101Gのファイルを先頭100Mだけ残して縮めるのはどうしたらいいですか?
あと、100Mと900Mのファイルをコピー無しに連結するのはどうしたらいいですか?
どちらも書き込み不可にしておけば目的を達成できます。
0159デフォルトの名無しさん
2008/09/11(木) 23:49:44しらねぇよ。
NTFSとMFTでもググって勝手にやれ。
0160デフォルトの名無しさん
2008/09/12(金) 00:01:29154無視かよ、俺じゃないけど。
それはEXEだから、DLLだから、という問題ではない。
EXEでもファイル名と、そのうち何バイト目から何バイト目だけを処理するって
オプションを指定できるようになっているものだってあるし、
DLLでも\0終端文字列を受け取るので、バイト数を直接的に指定できないってものもある。
0161デフォルトの名無しさん
2008/09/12(金) 00:10:02縮小、結合方法を教えてもらいたいです。
0162デフォルトの名無しさん
2008/09/12(金) 00:40:41constの付いたポインタでない普通の変数(intとかdoubleとか)のconstを
一時的にはずす方法ってありますか?
0163デフォルトの名無しさん
2008/09/12(金) 01:09:47const int i = 10;
*(int *)&i = 20;
i = 30; 見なかったことにしてくれ
0164デフォルトの名無しさん
2008/09/12(金) 01:18:350165デフォルトの名無しさん
2008/09/12(金) 01:24:12int& j = const_cast<int&>(i);でおk
0166デフォルトの名無しさん
2008/09/12(金) 01:30:27関数にファイルを渡す場合、内容が見えないのに何バイト目からいくらまでとか指定は困難では?
って言ってるのと同じに見える
で、知りたいのは
・1つのファイルを、メモリに読み込むことなく分割する方法
・2つのファイルを、メモリに読み込むことなく結合する方法
ってこと?それならたぶん無理だと思う
そもそも、ファイルの内容をメモリに読み込まないと、ファイルの操作ができないから
>>138を見ると、どこで100M分余計にメモリを食うのかわからない。
dll なり exe なりに渡すとコピーが発生するって事? >>142からそんな風に感じたんだけど。
でも>>149見ると、その dll や exe が受け取ったデータのコピーを取るとは思えない。
ファイルの中身をメモリに読み込むのが『余計』だと考えてるなら、これは余計じゃないんで効率化は無理
10Mずつ読み込むとか、そういう解決方法しかないと思うよ
結論:何をしてるのか、何がしたいのか、が分からない。今やってることをそのまま書いた方が分かりやすいかもよ
0168デフォルトの名無しさん
2008/09/12(金) 02:16:590169162
2008/09/12(金) 02:25:10typeid()を使っているのですが、
typeid(hoge).name()で帰ってくる文字列が本やサイトに載っているのと異なっています。
例えば、
int i; -> i
string s; -> Ss
vector<int> vi; -> St6vectorIiSaIiEE
vector<vector<double> > vvd; -> St6vectorIS_IdSaIdEESaIS1_EE
complex<int> ci; -> St7complexIiE
class Test0{}; Test0 t0; -> 4Test
という感じ(一部省略)になります。
なんとなく分かるのですが、完全には解読できません。
この表記の見方、もしくは解説サイトなどありましたら教えて下さい。
0170デフォルトの名無しさん
2008/09/12(金) 02:28:23意味がない。
返される文字列は処理系依存。だが異なる型は異なる文字列
になる事は保証されている。
0171169
2008/09/12(金) 03:03:42ありがとうございます。
具体的に書いた方が良さそうなので、書きます。
今、
template<typename T>
class Matrix{
private:
vector<vector<T> > _matrix;
・・・
};
のような行列クラスを作成しているのですが、
行列を要素に持つ行列を考慮したいので、
T が Matrix<int> というのも考えられます。
行列の中身を参照(表示)するときに、
行列の要素の型がintやdoubleなどの場合と、
行列の要素の型がMatrixの場合とを区別するために、
typeid()を使って,Tの構造を知ろうと思っています。
なので、name()をうまく解読できればと思いました。
方向性自体ダメですか?
0172デフォルトの名無しさん
2008/09/12(金) 03:11:10それこそ"type0", "type1"みたいな連番でも構わないわけだし。
素直に特殊化で頑張ってください。
0173169
2008/09/12(金) 03:47:41ありがとうございます。
便利なの見付けたと思ったのですが、
>それこそ"type0", "type1"みたいな連番でも構わない
その通りですね。
出直してきます。m(_ _)m
0174デフォルトの名無しさん
2008/09/12(金) 06:03:33合計のファイルサイズが小さい順に押してください。
0175デフォルトの名無しさん
2008/09/12(金) 06:38:550176デフォルトの名無しさん
2008/09/12(金) 06:40:46017790
2008/09/12(金) 07:46:35名前をつけるという方法で解決はできるのですが、
何かライブラリとかで提供されてきたstructとかだったら、勝手に型名をつけられないなぁと。
それか、型名無しだから名前を勝手につけても問題はない・・・ということになるのでしょうか。
その後いろいろやってたらunionを入れなくても、
struct中に2つ以上の型名のないstructをいれても2つめからのstructで>>90と同じエラーになります。
エラーは「error C2664: 'func' : 1 番目の引数を '' から '&' に変換できません。」とでます。
0178デフォルトの名無しさん
2008/09/12(金) 08:06:41f(){
HANDLE hd, he;
hd = CreateFile("out.dat", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 );
DuplicateHandle(GetCurrentProcess(), hd, GetCurrentProcess(), &he, 0, 1, DUPLICATE_SAME_ACCESS);
STARTUPINFO si; ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; si.hStdOutput = he;
PROCESS_INFORMATION pi; pi.hProcess = NULL;
CreateProcess(NULL, "xdoc2txt a.doc", NULL, NULL, TRUE,0, NULL, NULL, &si, &pi );
WaitForSingleObject(pi.hProcess,INFINITE);}
0179デフォルトの名無しさん
2008/09/12(金) 10:08:18ファイルを単純にコピーするとき、次の二つの実行速度はどっちが速いですか?
//A
ifstream fl_in("file1.txt", ios::in| ios::binary);
ifstream fl_out("file2.txt", ios::out| ios::binary);
char ch_get;
while(!file1.eof()){
ch_get= fl_in.get();
if(!file1.eof()) fl_out.put(ch_get);
}
//B
copy(istreambuf_iterator<char>(fl_in), istreambuf_iterator<char>(), ostreambuf_iterator<char>(fl_out));
copyは<algorithm>のです。
もっと高速に処理できるコードがあったら、そちらもよろしくお願いします。
0180デフォルトの名無しさん
2008/09/12(金) 10:09:540181デフォルトの名無しさん
2008/09/12(金) 10:13:36Cはコスト掛けた上で最後にAPIを呼ぶ。
0182デフォルトの名無しさん
2008/09/12(金) 10:15:28今度試して見ます。
fread,fwriteで思い出しましたが、c++のread, write関数との速度の違いはいかがでしょうか?
自分としては、freadやfwriteは、使い勝手の面で、境界越えしそうで怖いのですが。
0183デフォルトの名無しさん
2008/09/12(金) 10:40:48ReportEventで何を渡せばいいのでしょうか?
調べたのですが重大だけが見つかりませんでした。。。
0184デフォルトの名無しさん
2008/09/12(金) 10:49:23ネイティブAPIを避けるため、普通ならfwriteを呼ぶのがいい。
0185デフォルトの名無しさん
2008/09/12(金) 10:53:380186デフォルトの名無しさん
2008/09/12(金) 10:55:06fwriteでがんばります。
0187デフォルトの名無しさん
2008/09/12(金) 12:16:10エディットコントロール
0188デフォルトの名無しさん
2008/09/12(金) 12:26:100189デフォルトの名無しさん
2008/09/12(金) 17:10:52fread、fwriteは2Gまでの制限があるから注意な
0190デフォルトの名無しさん
2008/09/13(土) 00:50:04CreateFileするときにSECURITY_ATTRIBUTESで継承を許可(bInheritHandle = TRUE)にしておけば、
CuplicateHandleは要らないはず。
0191デフォルトの名無しさん
2008/09/13(土) 04:30:38C++Builder使え
0192デフォルトの名無しさん
2008/09/13(土) 17:00:13(a,b,c・・・) (x,y,z・・・)とするとき、ax + by + cz + ・・・です。
これを4スレッドに分けて計算したら早くなりますでしょうか?
0〜N/4、 N/4+1〜・・・と分割して和を求めるってことです。
0193デフォルトの名無しさん
2008/09/13(土) 17:01:250194デフォルトの名無しさん
2008/09/13(土) 17:35:11寧ろ4で割った余りが0,1,2,3でスレッドを分けた方が早いかもよ。
特にIntelの2コアや4コアの場合。
0195デフォルトの名無しさん
2008/09/13(土) 19:59:55Pen4,Core2Duo,AMD系ではおそらく逆に遅くなる
Core2Quadなら上手くやれば早くなる
環境依存だけどプロセスの優先度上げて、
コンテキストスイッチ減らした方が良いんじゃない?
0196デフォルトの名無しさん
2008/09/13(土) 20:47:34スレッド数が物理コア数以下なら速くなるはずだけど
その処理内容だとメモリアクセスがボトルネックになりそう。
SIMDなんかがある環境ならそれ使うようにオプション指定するなり
インラインアセンブラ使うのもいいんじゃないか。
0197デフォルトの名無しさん
2008/09/13(土) 20:48:36#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define N 110108864
char *a,*b; unsigned int s[4];
unsigned int f(void){unsigned int sum=0; for(int n=0;n<N;n++)sum+=a[n]*b[n];return sum;}
unsigned WINAPI g0(void*){for(int n=0;n<N/2;n++)s[0]+=a[2*n]*b[2*n];return 0;}
unsigned WINAPI g1(void*){for(int n=0;n<N/2;n++)s[1]+=a[2*n+1]*b[2*n+1];return 0;}
unsigned int g(void){ s[0]=s[1]=0; HANDLE hd[2];
hd[0]=(HANDLE)_beginthreadex(NULL, 0, g0,NULL, 0 ,NULL); hd[1]=(HANDLE)_beginthreadex(NULL, 0, g1,NULL, 0 ,NULL);
WaitForMultipleObjects(2, hd, TRUE, INFINITE);
CloseHandle(hd[0]);CloseHandle(hd[1]); return s[0]+s[1];}
unsigned WINAPI h0(void*){for(int n=0;n<N/4;n++)s[0]+=a[4*n+0]*b[4*n+0];return 0;}
unsigned WINAPI h1(void*){for(int n=0;n<N/4;n++)s[1]+=a[4*n+1]*b[4*n+1];return 0;}
unsigned WINAPI h2(void*){for(int n=0;n<N/4;n++)s[2]+=a[4*n+2]*b[4*n+2];return 0;}
unsigned WINAPI h3(void*){for(int n=0;n<N/4;n++)s[3]+=a[4*n+3]*b[4*n+3];return 0;}
unsigned int h(void){ s[0]=s[1]=s[2]=s[3]=0; HANDLE hd[4];
hd[0]=(HANDLE)_beginthreadex(NULL, 0, h0,NULL, 0 ,NULL); hd[1]=(HANDLE)_beginthreadex(NULL, 0, h1,NULL, 0 ,NULL);
hd[2]=(HANDLE)_beginthreadex(NULL, 0, h2,NULL, 0 ,NULL); hd[3]=(HANDLE)_beginthreadex(NULL, 0, h3,NULL, 0 ,NULL);
WaitForMultipleObjects(4, hd, TRUE, INFINITE); return s[0]+s[1]+s[2]+s[3];}
0198デフォルトの名無しさん
2008/09/13(土) 20:49:36cout<<"初期値設定中・・・\n";
a=new char[N] ; b=new char[N] ;
int n,cl; for(n=0;n<N;n++){int x=rand(); a[n]=(char)(x&15); b[n]=(char)((x>>4)&15); }
cout<<"計測開始・・・\n";
cl=GetTickCount(); cout<<"1 スレッド 計="<<f()<<" 掛かった時間="; cl=GetTickCount()-cl; cout<<cl<<endl;
cl=GetTickCount(); cout<<"2 スレッド 計="<<g()<<" 掛かった時間="; cl=GetTickCount()-cl; cout<<cl<<endl;
cl=GetTickCount(); cout<<"4 スレッド 計="<<h()<<" 掛かった時間="; cl=GetTickCount()-cl; cout<<cl<<endl;}
0199デフォルトの名無しさん
2008/09/13(土) 21:02:22#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define N 10097152
double *a,*b; double s[4];
double f(void){s[0]=0; for(int n=0;n<N;n++)s[0]+=a[n]/b[n];return s[0];}
unsigned WINAPI g0(void*){for(int n=0;n<N/2;n++)s[0]+=a[2*n]/b[2*n];return 0;}
unsigned WINAPI g1(void*){for(int n=0;n<N/2;n++)s[1]+=a[2*n+1]/b[2*n+1];return 0;}
double g(void){ s[0]=s[1]=0; HANDLE hd[2];
hd[0]=(HANDLE)_beginthreadex(NULL, 0, g0,NULL, 0 ,NULL); hd[1]=(HANDLE)_beginthreadex(NULL, 0, g1,NULL, 0 ,NULL);
WaitForMultipleObjects(2, hd, TRUE, INFINITE);
CloseHandle(hd[0]);CloseHandle(hd[1]); return s[0]+s[1];}
unsigned WINAPI h0(void*){for(int n=0;n<N/4;n++)s[0]+=a[4*n+0]/b[4*n+0];return 0;}
unsigned WINAPI h1(void*){for(int n=0;n<N/4;n++)s[1]+=a[4*n+1]/b[4*n+1];return 0;}
unsigned WINAPI h2(void*){for(int n=0;n<N/4;n++)s[2]+=a[4*n+2]/b[4*n+2];return 0;}
unsigned WINAPI h3(void*){for(int n=0;n<N/4;n++)s[3]+=a[4*n+3]/b[4*n+3];return 0;}
double h(void){ s[0]=s[1]=s[2]=s[3]=0; HANDLE hd[4];
hd[0]=(HANDLE)_beginthreadex(NULL, 0, h0,NULL, 0 ,NULL); hd[1]=(HANDLE)_beginthreadex(NULL, 0, h1,NULL, 0 ,NULL);
hd[2]=(HANDLE)_beginthreadex(NULL, 0, h2,NULL, 0 ,NULL); hd[3]=(HANDLE)_beginthreadex(NULL, 0, h3,NULL, 0 ,NULL);
WaitForMultipleObjects(4, hd, TRUE, INFINITE); return s[0]+s[1]+s[2]+s[3];}
0200デフォルトの名無しさん
2008/09/13(土) 21:03:09main(){ cout<<"初期値設定中・・・\n"; a=new double[N] ; b=new double[N] ;
int n,cl; for(n=0;n<N;n++){int x=rand(); a[n]=1+(double)(x&15); b[n]=1+(double)((x>>4)&15); }
cout<<"計測開始・・・\n";
cl=GetTickCount(); cout<<"1 スレッド 計="<<f()<<" 掛かった時間="; cl=GetTickCount()-cl; cout<<cl<<endl;
cl=GetTickCount(); cout<<"2 スレッド 計="<<g()<<" 掛かった時間="; cl=GetTickCount()-cl; cout<<cl<<endl;
cl=GetTickCount(); cout<<"4 スレッド 計="<<h()<<" 掛かった時間="; cl=GetTickCount()-cl; cout<<cl<<endl;}
0201デフォルトの名無しさん
2008/09/13(土) 21:06:39何度もメモリ読んでいるうちに、キャッシュが効いたりするのではと思い
一番最後にもう一度1スレッドを計算しても速度ははじめと同じでした。
0202デフォルトの名無しさん
2008/09/13(土) 21:13:22こっちの方が早くね?
主な変更はローカル変数 x の導入
unsigned WINAPI g0(void*dummy){unsigned int x=0;char *p=&a[0],*q=&b[0];for(int n=0;n<N/2;n++)x+=p[n]*q[n];s[0]=x;return 0;}
unsigned WINAPI g1(void*dummy){unsigned int x=0;char *p=&a[N/2],*q=&b[N/2];for(int n=0;n<N/2;n++)x+=p[n]*q[n];s[1]=x;return 0;}
0203デフォルトの名無しさん
2008/09/13(土) 21:23:58VC++2008の速度最適化したときの数値は250 clockくらいです。
BCCの速度が鈍いだけで。VC++2008だと、1スレッドが最も速かったです。
>>202 このようにしてもVC++では大して効果なく1スレッドが最速でした。1コアCPUなんですが。
unsigned WINAPI h0(void*){int m=0; double x=0; for(int n=0;n<N/4;n++){x+=a[m]/b[m];m+=4;} s[0]=x; return 0;}
0204デフォルトの名無しさん
2008/09/13(土) 21:44:21Athlon64だとどちらも1スレッド>2スレッド>4スレッドとなる。
近々X2かPhenom買うのでそちらも試してみたい。
0205デフォルトの名無しさん
2008/09/13(土) 22:15:200206デフォルトの名無しさん
2008/09/13(土) 22:19:000207デフォルトの名無しさん
2008/09/13(土) 23:31:29#include <list>
using namespace std;
class C
{
public:
int ic;
C (int c) { ic = c; }
};
int main()
{
list<C *> mylist;
mylist.push_back( new C(0) );
mylist.push_back( new C(1) );
mylist.push_back( new C(2) );
}
こんな感じになってるとして、ic == 1 であるようなオブジェクトだけを、
・list から削除し、
・かつ delete する
には、どのように書けばよいのでしょう。
0208デフォルトの名無しさん
2008/09/14(日) 00:32:06#include <list>
#include <algorithm>
using namespace std;
class C {
public:
int ic;
C (int c) { ic = c; }
~C() { cout << "~C" << endl; }
};
struct delete_equal_to: public std::binary_function<C *, int, bool> {
bool operator ()(C * p, int c) const {
return (NULL != auto_ptr<C>(p->ic == c ? p: NULL).get());
}
};
int main() {
list<C *> mylist;
mylist.push_back( new C(0) );
mylist.push_back( new C(1) );
mylist.push_back( new C(2) );
cout << mylist.size() << endl;
mylist.remove_if(bind2nd(delete_equal_to(), 1));
cout << mylist.size() << endl;
}
0209デフォルトの名無しさん
2008/09/14(日) 00:41:07returnの中はp->ic == cだとだめなの?って書こうとしたが、deleteさせる意図があるのね。
そこまでするくらいなら、list<shared_ptr<C> >使えよって言ってやるべきだと思う。
0210デフォルトの名無しさん
2008/09/14(日) 00:45:310211207
2008/09/14(日) 00:57:04もしかしてさらっと書ける構文とかあるのかと思ったら、そうでも無いのですね。
でも一つずつ読解してみます。
ありがとうございました!
0212デフォルトの名無しさん
2008/09/14(日) 00:59:34mylist.push_back( new C(0) );
はpush_backに失敗するとnew C(0)したオブジェクトがリークする
0213デフォルトの名無しさん
2008/09/14(日) 01:15:33宿題板で、作って頂いたc++なのですが習ってない部分も出ていて、
よくわからず、困っています。
習っていない関数を使うのには、特に問題はないのですが
提出の際に説明書っぽいのをつけるのですが作成できず困っています。
例えば、この作業をするには?とか、オプションでこんな事も出来ます
とかです。
スレチかもしれませんが、宜しくお願いします。
ちなみに、宿題板ではボロボロに言われ、ここにきました。
すいません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7720.txt
0214207
2008/09/14(日) 01:18:29ということは、push_back() の引数として直接与えるんじゃなくて、
いったん
C *p = new C(0);
して、とりあえず mylist.push_back( p ); としてみて、
std::bad_alloc が投げられたらあきらめて delete する、
みたいな感じでしょうか。
0215デフォルトの名無しさん
2008/09/14(日) 01:22:08そんなの一から読めって言うのかよ。
大まかな機能ぐらい説明しろよ。
お前が作らせたんなら分かるだろうが。
というか、宿題スレ池。
C/C++の宿題を片付けます 115代目
http://pc11.2ch.net/test/read.cgi/tech/1217741118/
0216デフォルトの名無しさん
2008/09/14(日) 01:29:56わかりました。宿題スレに行きます。
すいませんでした。ご迷惑お掛けしました。
ちなみに、内容はエンコドとデコドで
テキストを吐き出し、オプションでプリントするみたいな感じです。
失礼しました。
0217デフォルトの名無しさん
2008/09/14(日) 01:33:41無理せずに単位落としたら?
0218デフォルトの名無しさん
2008/09/14(日) 01:36:08bad_allocが投げられたらdeleteする必要はないぞ。
0220デフォルトの名無しさん
2008/09/14(日) 02:24:00お前は読み間違えてる
0222デフォルトの名無しさん
2008/09/14(日) 03:02:24失敗しているのだから、deleteしたらまずいだろう
0223デフォルトの名無しさん
2008/09/14(日) 03:37:51C *p = new C(0);
try
{
mylist.push_back(p);
}
catch (std::bad_alloc const&)
{
delete p;
throw;
}
auto_ptrでもいける。
std::auto_ptr<C> p(new C(0));
mylist.push_back(p.get());
p.release();
0224デフォルトの名無しさん
2008/09/14(日) 03:54:17ああそういう意味かごめん
そりゃdeleteは必要だわ
newとpush_backを分離する事を前提とした
話なのね
0225デフォルトの名無しさん
2008/09/14(日) 06:23:11さらっと、というか自分でループまわす構文はあるよ。
STL的ではないけど。
for(list<C *>::iterator it=mylist.begin(); it != mylist.end();) {
// 1なら
if((*it)->ic == 1) {
delete *it;
it= mylist.erase(it);
}
// 1じゃないなら
else {
++it;
}
}
0226デフォルトの名無しさん
2008/09/14(日) 06:53:47#include <boost/ptr_container/ptr_list.hpp>
typedef boost::ptr_vector<C> list_type; //ポインタ指定しないが、中身はポインタになる
list_type mylist;
mylist.push_back( new C(0) );
〜
for(list_type::iterator it = mylist.begin(); it != mylist.end();) {
if(it->ic == 1) {
it = mylist.erase(it); //消去動作で自動でdeleteされる
}
〜 //あとは225と一緒
詳細
ttp://www.kmonos.net/alang/boost/classes/pointer_container.html
0227207
2008/09/14(日) 10:05:26> こういうことだろ。bad_allocを投げるのはmylist、pはdeleteしないといけない。
あ、そうです。言葉足らずというのはそれが言いたかったのでした。
>>225
おおお、これです。こんな感じのを期待していました!
> STL的ではないけど。
というのは、イテレーションしていく過程はあくまでイテレータにまかせるべきで、
「it= mylist.erase(it);」のような「つなぎかえ」(?)のようなことを外野がやるのは
スマートじゃない、ということでしょうか。
うーむ、「実行時に動的に new したものを連結させておき、いらなくなったらそこだけ外す」
というのは良くあるケースかと思っていたのですが、もしかしてそもそもデータ構造の
選び方が間違ってますか……? >>224氏も、
> newとpush_backを分離する事を前提とした
> 話なのね
とおっしゃってるし……。
>>226
いろいろな環境で動かしたいのでできれば boost は避けたいのですが、
でも勉強になります。特にリンク先の「etc」のところ。
ありがとうございます。
0228デフォルトの名無しさん
2008/09/14(日) 16:03:52boostって静的リンク(?)だから大丈夫じゃないの?
0229デフォルトの名無しさん
2008/09/14(日) 16:44:57Test.h(Testクラス ヘッダファイル)
Test.cpp(Testクラス コンストラクタ)
show.cpp(Test<T>::show() 関数)
show1.cpp(Test<Test<int>>::show() show()のテンプレート特殊化)
で構成されています。
show.cppにあるTest<T>::show()を
アップしたファイルのように書き換えるとコンパイルエラーが発生してしまい、
これを解決できません。
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7722.txt
0230デフォルトの名無しさん
2008/09/14(日) 17:58:13friend ostream &operator << (ostream &str, T const &val) {
return str << val ;
}
C++はあまり使ったことはないけど、これでも追加するといいかも
エロいひとの解答待つか
0231デフォルトの名無しさん
2008/09/14(日) 18:12:39list だと、こうじゃなかったっけ?
ごめん。調べないで書いてる。
for (list<C *>::iterator it = mylist.begin(); it != mylist.end();) {
if ((*it)->ic == 1) {
delete *it;
mylist.erase(it++);
} else {
++it;
}
}
0232デフォルトの名無しさん
2008/09/14(日) 18:37:020233デフォルトの名無しさん
2008/09/14(日) 18:45:29mylist.erase(it++);
はイテレータを進めてから、進める前のイテラータに対してeraseするから問題ないと思うよ。
listのeraseでは消したイテレータ以外は無効にならないから。
0234デフォルトの名無しさん
2008/09/14(日) 21:04:13it = mylist.erase(it);
0235デフォルトの名無しさん
2008/09/14(日) 21:41:25考慮して、戻りを代入するべきでは。
0236デフォルトの名無しさん
2008/09/14(日) 22:10:33set,multissetとかだとeraseの戻り値の型がvoidだったりするから、
it == hoge.eraseが書けないときもある。
vectorならeraseの戻り値を使えても、別なコンテナに変えられる可能性も
考慮してit++にするべきでは。
0237デフォルトの名無しさん
2008/09/14(日) 22:53:20vectorならit++は使えない。
0238229
2008/09/14(日) 22:53:23ありがとうございます。
<<のオーバーロードで修正がベスト何ですかね。
0239デフォルトの名無しさん
2008/09/14(日) 23:26:15とlistとはやりかたが違うから、差し替え考慮するのは無理があるんでない?
0240デフォルトの名無しさん
2008/09/15(月) 02:15:17mapやsetはeraseの戻り値がvoidなので、it++するしかない。
シーケンスコンテナと連想コンテナの取り替えを想定するのは
無理があるって事だな。
0241デフォルトの名無しさん
2008/09/15(月) 09:14:330242デフォルトの名無しさん
2008/09/15(月) 10:28:05VC++が入ってないPCでも実行する方法を教えてください。
0243207
2008/09/15(月) 10:29:22ありがとうございます。
「別なコンテナに変える」ということの意味はまだ良くわからないので、
引き続き勉強します。
>>241
> effective STL に同じような話がある
なるほど、早速ポチりました。
0244デフォルトの名無しさん
2008/09/15(月) 10:47:02エラーが出ないように修正する
0245デフォルトの名無しさん
2008/09/15(月) 10:53:17VC++がインストールされているPCではエラーがなく実行できます。
0246デフォルトの名無しさん
2008/09/15(月) 10:54:07まずはエラーの内容を示さないと・・・・
MFC7のdllがないとかか。
0247デフォルトの名無しさん
2008/09/15(月) 10:59:51MSから再配布可能なんちゃらを実行するPCにインストールすればいいとおも
0248デフォルトの名無しさん
2008/09/15(月) 11:49:58ほかのパソコンで実行すると指定したプログラムは実行できません。と表示されます。
0249デフォルトの名無しさん
2008/09/15(月) 11:52:21「動きません」って言って具体的なこと書かないんだろうな。
0250デフォルトの名無しさん
2008/09/15(月) 11:53:18本当にメッセージそれだけ?
0251デフォルトの名無しさん
2008/09/15(月) 11:57:28今はほかのパソコンにもVC++を入れてしまっているので確認はできないんですけど、もう少し長かったような気がします。
VC++を入れてない人のパソコンでも何かインストールをしなくても普通のアプリケーションみたいに実行できるようにしたいんです。
0252デフォルトの名無しさん
2008/09/15(月) 12:01:391. VC++のバージョンにあうランタイムライブラリをインストールさせる。
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&DisplayLang=ja
http://www.microsoft.com/downloads/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2&DisplayLang=ja
2. msvcr90.dllなどをMicrosoft.VC90.CRT.manifestなどと共にEXEと同じフォルダに置く。
0253デフォルトの名無しさん
2008/09/15(月) 12:22:30基本的によく分からないエラーが出たら、
スクリーンショットを撮る事。
そのプログラムのプロジェクトプロパティの
共通言語ランタイムサポートが「使用しない」以外なら
.NET Framework Runtime をインストールする必要がある。
MFCの使用が「共有DLLで〜」なら「スタティックライブラリで〜」に。
構成プロパティ - C/C++のランタイムライブラリが「/MD」なら「/MT」に。
0254242
2008/09/15(月) 12:26:45ソリューション構成をReleaseにしてコンパイルしたものを、ほかのPCに移動して実行すればいいんでしょうか。
今はそばにVC++が入ってないPCがないので確認ができないんですけど、それでいいのでしょうか。
>>253
今はエラーを確認できないのでスクリーンショットも撮れません。
0255デフォルトの名無しさん
2008/09/15(月) 12:30:060256デフォルトの名無しさん
2008/09/15(月) 12:31:07>それでいいのでしょうか。
お前、>>252-253を読んだ上で言ってるの?
0257デフォルトの名無しさん
2008/09/15(月) 12:51:00http://www.stlsoft.org
STLSoftの中身
ACESTL (http://acestl.org).
ATLSTL (http://atlstl.org).
COMSTL (http://comstl.org).
.netSTL (http://dotnetstl.org).
InetSTL (http://inetstl.org).
MFCSTL (http://mfcstl.org).
UNIXSTL (http://unixstl.org)
WinSTL (http://winstl.org).
もうなんだか至れり尽せりですね。
自分がやっているプロジェクトの意味が無いように思えてきた・・・。おrz!!!
http://d.hatena.ne.jp/studiokingyo/20061223
0258デフォルトの名無しさん
2008/09/15(月) 12:51:32どういうソースで出るんだ?
0259デフォルトの名無しさん
2008/09/15(月) 12:53:36できればほかのパソコンに何かインストールする方法は避けたいです。
>2. msvcr90.dllなどをMicrosoft.VC90.CRT.manifestなどと共にEXEと同じフォルダに置く。
よくわかりませんでした。もう少し詳しく教えてください。
>>253
共通言語ランタイムサポートを使用しないになっています。
>MFCの使用が「共有DLLで〜」なら「スタティックライブラリで〜」に。
>
>構成プロパティ - C/C++のランタイムライブラリが「/MD」なら「/MT」に。
この設定でコンパイルすると
1>MSVCRT.lib(wcrtexew.obj) : error LNK2019: 未解決の外部シンボル _wWinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\Othello\Debug\Othello.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と、なってコンパイルできません。
>>256
調べてる間にレスがきてしまったので失礼しました。
0260デフォルトの名無しさん
2008/09/15(月) 12:55:16自分で翻訳なり、ソース解析なり出来ないなら諦めた方が良い
問題が起きたとき、自力で解決出来んだろう
0261デフォルトの名無しさん
2008/09/15(月) 13:02:02main() で始まるコンソールプログラムなのに コンソールプロジェクトになっていないんじゃ・・・
WinMain() で始まる windows プログラムなのに、
そのエラーとなると tchar.h あたりの UNICODE 関連が怪しい
0262デフォルトの名無しさん
2008/09/15(月) 13:02:51「/MDd」を「/MT」にしてないか?
「/MDd」なら「/MTd」だぞ。MD→MTなんだから。
あとプロジェクトプロパティの左上に構成ってあるだろ。
デバッグ版とリリース版で設定が分かれてるから、それぞれ設定を変えること。
まぁ、リリース版だけでも良いと思うけど。
0263デフォルトの名無しさん
2008/09/15(月) 13:06:100264デフォルトの名無しさん
2008/09/15(月) 14:03:24日本語の解説サイトも作る
0265デフォルトの名無しさん
2008/09/15(月) 14:04:290266デフォルトの名無しさん
2008/09/15(月) 14:29:55こんな感じだそうです。
pow()は底 の乗数 乗の計算を行って返す関数である。底 がゼロで乗数 がゼロ以下の場合にはdomain errorが発生する。また、底 が負で乗数 が小数の場合にもdomain errorになる。計算結果がオーバーフローする場合はrange errorが発生する。
0267266
2008/09/15(月) 14:30:560268デフォルトの名無しさん
2008/09/15(月) 14:54:55d = pow(0.0, -2.1);
std::cout << d << std::endl;
d = pow(-2.1, 0.1);
std::cout << d << std::endl;
d = pow(10e10, 100);
std::cout << d << std::endl;
---------------
1.#INF
-1.#IND
1.#INF
再現出来ないな。何が違うんだろう。
0269デフォルトの名無しさん
2008/09/15(月) 15:01:170270デフォルトの名無しさん
2008/09/15(月) 16:19:19下記のプログラムを実行するとhoge関数が呼ばれて戻ってきた時には、TESTメンバのstrの領域はデストラクタで、
解放されてしまってます。この場合は、main()の最後でlistのstrを解放するしかないのでしょうか?
もっと別のやり方があれば教えて下さい。宜しくお願いします。
#include <string>
#include <list>
struct TEST {
std::string *str;
TEST() : str(NULL) {}
~TEST() { delete[] str; }
};
void hoge(std::list<TEST> &list)
{
TEST test;
test.str = new std::string[10];
list.push_back(test);
}
int main()
{
std::list<TEST> list;
hoge(list);
// list.str不適切なポインタ
return 0;
}
0271デフォルトの名無しさん
2008/09/15(月) 17:02:15計算結果を1ステップごとにfstream使ってファイルhoge.txtに出力していました。
上記とは一切関係ない部分のバグを取って再度実行したら、
ファイルへの出力が途中からされなくなってしまいました。
1000回計算するとしたら380回から出力されません。ただ、coutではきちんと値が表示されます。
出力されなくなった後もプ゚ログラム自体は動き続けているためエラーが出ず、原因がわかりません。
このような症状の場合、どのような原因が考えられるか教えていただけませんか?
0272デフォルトの名無しさん
2008/09/15(月) 17:12:590273デフォルトの名無しさん
2008/09/15(月) 17:20:560274デフォルトの名無しさん
2008/09/15(月) 17:23:12エラーを出す方法とかありますか?
0275デフォルトの名無しさん
2008/09/15(月) 17:23:27fstreamがエラー状態になっているとか。
0276デフォルトの名無しさん
2008/09/15(月) 17:24:33TESTにきちんとコピーコンストラクタとoperator =を設ける。
0278デフォルトの名無しさん
2008/09/15(月) 17:34:40例外が嫌なら書き込み後にof.bad()とかof.fail()とか見ればいい。
0279242
2008/09/15(月) 17:40:36皆様ありがとうございます。
0280デフォルトの名無しさん
2008/09/15(月) 18:53:59ポインタのメンバをディープコピーするTESTのコピーコンストラクタをきちんと書くこと。
0281デフォルトの名無しさん
2008/09/16(火) 00:20:58main(){
char a[]="マルチバイト文字列 mbs の sz 文字分をワイド文字列に変換します。";
wchar_t b[300];
cout<<strlen(a)<<endl;
MultiByteToWideChar(CP_ACP, 0, a, n, b, 300);
cout<<wcslen(b)<<endl;
}
0282デフォルトの名無しさん
2008/09/16(火) 00:28:540283デフォルトの名無しさん
2008/09/16(火) 00:46:12int m,n;
char a[]="マル"; wchar_t b[300];
n=strlen(a); mbstowcs(b,a,n);
m=wcslen(b); wcstombs(a,b,m);
cout<<n<<" "<<m<<" "<<strlen(a)<<endl;
0284デフォルトの名無しさん
2008/09/16(火) 00:50:030285デフォルトの名無しさん
2008/09/16(火) 01:08:59#include <windows.h>
#include <time.h>
#include <iostream>
using namespace std;
main(){
int m,n,r,k;
char a[500]="マクロの動作は、有効になっているコンパイラ ディレクティブによって異なる。変換元と変換先の型が同じ場合は変換は行われない。コンパイラ ディレクティブでは、T および OLE を次のように変換する。";
wchar_t b[500];
n=strlen(a); mbstowcs(b,a,n+1);
m=wcslen(b); wcstombs(a,b,m+1);
int cl=clock();
for(k=0;k<1000000;k++){
r=MultiByteToWideChar(CP_ACP, 0, a, n, b, 500); b[r]=0;
r=WideCharToMultiByte(CP_ACP, 0, b, m, a, 500, NULL, NULL ); a[r]=0;}
cl=clock()-cl; cout<<cl<<endl;
for(k=0;k<1000000;k++){
mbstowcs(b,a,n+1); wcstombs(a,b,m+1);}
cl=clock()-cl; cout<<cl<<endl;}
0286デフォルトの名無しさん
2008/09/16(火) 01:34:510287デフォルトの名無しさん
2008/09/16(火) 01:44:310288デフォルトの名無しさん
2008/09/16(火) 10:03:560289デフォルトの名無しさん
2008/09/16(火) 12:28:05一致する文字が存在するか見つける高速な方法はSTLのmapですか。
一番速い方法教えてください。 あと元データは削除、追加可能でお願いします。
0290デフォルトの名無しさん
2008/09/16(火) 12:32:39Double-Array は Trie を表現するためのデータ構造です. ハッシュ木, デジタルトライ, パトリシア木, Suffix Array による
擬似 Trieといった 他の Trie の実装に比べ高速に動作します.
オリジナル の Double-Arrayは, 動的に key の追加削除を行えるような枠組ですが,
Darts は ソート済の辞書を一括してDouble-Array に変換することに機能を絞っています.
http://chasen.org/~taku/software/darts/
0291デフォルトの名無しさん
2008/09/16(火) 15:49:12#include <windows.h>
#include <iostream>
#include <map>
#include <hash_map>
#include <string>
#include <vector>
using namespace std;
map<string,int> stlmap;
hash_map<string,int> hashmap;
vector<string> vec;
string strgen(){ int R=10+rand()%10; string str=""; for(int j = 0; j < R; j++) str+=(char)(97+rand()%3); return str; }
int main() {
int i,cl; pair<string,int> p;
for(i = 0; i < 100; i++) { p = make_pair(strgen(),i); stlmap.insert(p);hashmap.insert(p);vec.push_back(p.first);}
int n=0; string searchword(strgen());
#define N 500000
// 空のループ
cl=timeGetTime();for(i = 0; i < N; i++) ;cl=timeGetTime()-cl; cout<<cl<<endl;
// STLmap
cl=timeGetTime(); for(i = 0; i < N; i++) stlmap.find(searchword); cl=timeGetTime()-cl; cout<<cl<<endl;
// STLport_hashmap
cl=timeGetTime(); for(i = 0; i < N; i++) hashmap.find(searchword); cl=timeGetTime()-cl; cout<<cl<<endl;
// Vector
cl=timeGetTime();
for(i = 0; i < N; i++)for(int j=0;j<vec.size();j++)if(vec[j]==searchword)break;
cl=timeGetTime()-cl; cout<<cl<<endl;}
0292十分速いじゃん…
2008/09/16(火) 16:25:57#include <map>
#include <stlport/hash_map>
#include <string>
#include <vector>
#include <boost/progress.hpp>
using namespace std;
map<string,int> stlmap; hash_map<string,int> hashmap; vector<string> vec;
string strgen(){ int R=10+rand()%10; string str=""; for(int j = 0; j < R; j++) str+=(char)(97+rand()%3); return str; }
int main() {
int i,cl; pair<string,int> p;
for(i = 0; i < 100; i++) { p = make_pair(strgen(),i); stlmap.insert(p);hashmap.insert(p);vec.push_back(p.first);}
#define BEGIN { boost::progress_timer t;
#define END }
int n=0; string searchword(strgen());
#define N 500000
BEGIN;for(i = 0; i < N; i++) ;END; // 空のループ
BEGIN; for(i = 0; i < N; i++) stlmap.find(searchword); END; // STLmap
BEGIN; for(i = 0; i < N; i++) hashmap.find(searchword); END; // STLport_hashmap
BEGIN; // Vector
for(i = 0; i < N; i++)for(int j=0;j<vec.size();j++)if(vec[j]==searchword)break; END;}
g++ hashmap.cxx -I /usr/include/stlport/ -lstlport -O2
% ./a.out |tr "\n" " "
0.00 s
0.66 s
0.17 s
4.95 s
0293デフォルトの名無しさん
2008/09/16(火) 16:35:300294デフォルトの名無しさん
2008/09/16(火) 17:15:340295デフォルトの名無しさん
2008/09/16(火) 17:35:55#include <iostream>
#include <map>
#include <hash_map>
#include <string>
#include <vector>
#include <unordered_map>
#include <time.h>
using namespace std;
map<string,int> stlmap;
hash_map<string,int> hashmap;
tr1::unordered_map<string,int> unorderedmap;
string strgen(){ int R=10+rand()%10; string str=""; for(int j = 0; j < R; j++){int r=rand(); str+=(char)(97+r&3)+(char)(97+(r>>2)&3);} return str; }
int main() {
int i,cl; pair<string,int> p;
for(i = 0; i < 10000; i++) { p = make_pair(strgen(),i); stlmap.insert(p);hashmap.insert(p);unorderedmap.insert(p);}
int n=0; string searchword(strgen());
#define N 500000
// 空のループ
cl=clock();for(i = 0; i < N; i++) ;cl=clock()-cl; cout<<cl<<endl;
// STLmap
cl=clock(); for(i = 0; i < N; i++) stlmap.find(searchword); cl=clock()-cl; cout<<cl<<endl;
// STLport_hashmap
cl=clock(); for(i = 0; i < N; i++) hashmap.find(searchword); cl=clock()-cl; cout<<cl<<endl;
//unorderedmap
cl=clock(); for(i = 0; i < N; i++) unorderedmap.find(searchword); cl=clock()-cl; cout<<cl<<endl;}
0296デフォルトの名無しさん
2008/09/16(火) 18:02:46ここのコードがコンパイルしたいです。 BCC2009かVC++2008のやり方判りたいです。
http://articles.blog79.fc2.com/blog-entry-25.html
0297デフォルトの名無しさん
2008/09/16(火) 18:16:270298デフォルトの名無しさん
2008/09/16(火) 19:07:44コンパイルできずにしばらく悩んだ
それにしてもDinkumwareは遅い・・・
0299デフォルトの名無しさん
2008/09/16(火) 23:05:05SP1当てればstd::tr1::unordered_mapも使えるよ。
もちろん性能は変わらないだろうけど。
0300デフォルトの名無しさん
2008/09/16(火) 23:59:36自分で増減させると面倒です。
0301デフォルトの名無しさん
2008/09/17(水) 00:02:400302デフォルトの名無しさん
2008/09/17(水) 00:13:45造形が凄くソソるよね……
0303デフォルトの名無しさん
2008/09/17(水) 00:19:27major(static) function objectの方がそそります^q^
0304デフォルトの名無しさん
2008/09/17(水) 00:34:320305デフォルトの名無しさん
2008/09/18(木) 02:44:47このとき、(1+a)^x (1+b)^y (1+c)^z ・・・・の(x+y+z+・・・)乗根を求めたいです。
どのように計算するのが速いでしょうか? 100項目程度あるとします。
0306デフォルトの名無しさん
2008/09/18(木) 02:47:040307デフォルトの名無しさん
2008/09/18(木) 02:59:26>>306 C++のソース教えてください
0308デフォルトの名無しさん
2008/09/18(木) 03:02:51(x+y)logR=xlog(1+a)+ylog(1+b)となり、logの計算量がどの位かかるかってことです。
0309デフォルトの名無しさん
2008/09/18(木) 03:23:15ソースはめんどくさい
x+y+z+... = Sとおくと、答えはおよそ1+(ax+by+cz+...)/S
a<<1の時の近似式(1+a)^x=1+axを使って、a,b,c,...の1次の項だけ取り出すとこうなる
logとか使うまでもない
0310デフォルトの名無しさん
2008/09/18(木) 03:23:31#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200000
main(){
int n, *a=new int[N];
float *x=new float[N];
for(n=0;n<N;n++){ a[n]=rand(); x[n]=(float)(a[n]&255)/1024;}
double kei=0; for(n=0;n<N;n++) kei+=a[n];
double s=1; int cl=clock();
for(n=0;n<N;n++)s*=pow(1.0+a[n],x[n]/kei); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++)s+=x[n]*log(1+a[n]); s/=kei; s=exp(s); cl=clock()-cl;
printf("%g %d\n",s,cl);
}
0311デフォルトの名無しさん
2008/09/18(木) 03:28:26トンクス 教えてもらったものを付け加えましたが、値がかなり違っています。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200000
main(){
int n, *a=new int[N];
float *x=new float[N];
for(n=0;n<N;n++){ a[n]=rand(); x[n]=(float)(a[n]&255)/1024;}
double kei=0; for(n=0;n<N;n++) kei+=a[n];
double s=1; int cl=clock();
for(n=0;n<N;n++)s*=pow(1.0+a[n],x[n]/kei); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++)s+=x[n]*log(1+a[n]); s/=kei; s=exp(s); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++) s+=a[n]*x[n]; s=1 + s/kei; cl=clock()-cl;
printf("%g %d\n",s,cl);
}
0312デフォルトの名無しさん
2008/09/18(木) 03:29:330313デフォルトの名無しさん
2008/09/18(木) 03:34:130314デフォルトの名無しさん
2008/09/18(木) 03:42:10#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200000
main(){
int n, *a=new int[N];
float *x=new float[N];
for(n=0;n<N;n++){ a[n]=rand(); x[n]=(float)(a[n]&255)/1024;}
double kei=0; for(n=0;n<N;n++) kei+=a[n];
double s=1; int cl=clock();
for(n=0;n<N;n++)s*=pow(1.0+x[n],a[n]/kei); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++)s+=a[n]*log(1+x[n]); s/=kei; s=exp(s); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++) s+=a[n]*x[n]; s=1 + s/kei; cl=clock()-cl;
printf("%g %d\n",s,cl);
}
0315デフォルトの名無しさん
2008/09/18(木) 03:47:04値が小さくなるはずですが、計算結果が他より大きいです。
あと、(1+A) (1+B) (1+C) ・・・のS乗根は、なぜ上のような式になりますか?
Aの値は1より大きいかも知れないですが・・・すると高次の項のほうが大きいかもしれません。
(Aはaxなどです。)
0316デフォルトの名無しさん
2008/09/18(木) 03:48:25N=200000でやったら、そりゃ誤差でかくなるの当たり前
0317デフォルトの名無しさん
2008/09/18(木) 03:51:31a,b,...<<1なんだから、ax/S,by/,...S<<1だよな
0318デフォルトの名無しさん
2008/09/18(木) 03:54:250319デフォルトの名無しさん
2008/09/18(木) 13:14:45変換できますか? 自作できますか?
0320デフォルトの名無しさん
2008/09/18(木) 13:18:48wchar_tの文字コードは処理系依存であって、変換はcharの文字コードとwchar_tの文字コードを明確に示してくれないと答えようがない。
とりあえず使ってるコンパイラから書くってのはどう?
0321デフォルトの名無しさん
2008/09/18(木) 13:20:550322デフォルトの名無しさん
2008/09/18(木) 13:26:38すべての一語を標準関数で求めておいて、配列にいれておくという方法です。
0323デフォルトの名無しさん
2008/09/18(木) 13:29:33文字列を記録している文字コードにも依存しますか?
SJIS、EUCなど、それぞれで変換関数は変わりますか?
0324デフォルトの名無しさん
2008/09/18(木) 13:31:570325デフォルトの名無しさん
2008/09/18(木) 13:38:18wchar_t → charはこれでいいみたいです。
wctomb(char *s, wchar_t wc)
{
*s = (char)wc;
}
http://libc.blog47.fc2.com/blog-entry-71.html
0326デフォルトの名無しさん
2008/09/18(木) 13:42:170327デフォルトの名無しさん
2008/09/18(木) 13:58:54やりたいことは、gushtUpdataAreaが配列であり、gulngUpdataAddressの示すアドレスに対してオフセットしたアドレスにgushtUpdataAreaの中身をコピーするというものです。
volatile static u_short *pushtWrAdr;
volatile static u_short *pushtRdAdr;
volatile static u_long ulngAdr;
u_long ulngI;
ulngAdr = (gulngUpdataAddress & 0x0fffffff) + 0x0c800000;
pushtRdAdr = gushtUpdataArea;
pushtWrAdr = (u_long *)ulngAdr;
for(ulngI = 0; ulngI < gulngUpdataDataCount; ulngI++ ){
*pushtWrAdr++ = *pushtRdAdr++;
}
pushtWrAdr = (u_long *)ulngAdr;の部分の記述が悪いと思うのですが、どうすればいいでしょうか?
0328デフォルトの名無しさん
2008/09/18(木) 14:10:06コンパイルできてる?
gulngUpdataAddressの型が気になる。
0329デフォルトの名無しさん
2008/09/18(木) 14:13:420330デフォルトの名無しさん
2008/09/18(木) 14:14:37a[] no size = 3
65 130 160
b[] no size = 3
65 130 160
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
unsigned char a[]="Aあ";
wchar_t b[10];
printf("a[] no size = %d\n",strlen(a));
for(int n=0;b[n]!=0;n++) printf("%d ",a[n]);
mbstowcs(b,a,strlen(a)+1);
printf("\n\nb[] no size = %d\n",wcslen(b));
for(int n=0;b[n]!=0;n++) printf("%d ",b[n]);
}
0331デフォルトの名無しさん
2008/09/18(木) 14:18:48これはなんの変換もしていないみたいです。
BCC2009です。
0332デフォルトの名無しさん
2008/09/18(木) 14:19:290333デフォルトの名無しさん
2008/09/18(木) 14:28:55#include <iostream>
#include <locale.h>
using namespace std;
main(){
setlocale(LC_ALL, "japanese");
unsigned char a[]="Aあ"; wchar_t b[10];
printf("a[] no size = %d\n",strlen(a));
for(int n=0;a[n]!=0;n++) printf("%d ",a[n]);
mbstowcs(b,a,strlen(a)+1);
printf("\n\nb[] no size = %d\n",wcslen(b));
for(int n=0;b[n]!=0;n++) printf("%d ",b[n]);
}
0334デフォルトの名無しさん
2008/09/18(木) 16:43:57for(int i=0; i < 10; i++)
;
}
上のやつってwhileが回っている間int型の変数分のメモリをどんどん食っていく?
開放せん?
0335デフォルトの名無しさん
2008/09/18(木) 16:46:520336デフォルトの名無しさん
2008/09/18(木) 16:48:58VCで動いてたコードをBCCに持ってきたら動かない現象が発生しました。
_fstatで0が返ってくるのに中身がちゃんと入ってないみたいです。
http://up01.ayame.jp/up/download/1221723883.c
あれこれ弄ってみたけどうまくいかないorz
0337デフォルトの名無しさん
2008/09/18(木) 17:45:00先頭にアンダーラインが付いてる関数は基本的に移植性がない。
BCCではPOSIX準拠の fstat() を代わりに提供している。
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
0338デフォルトの名無しさん
2008/09/18(木) 17:50:16WinならAPIでいいだろう
無理なら、boostとかから探すとか
0339デフォルトの名無しさん
2008/09/18(木) 17:55:29まず表面化することないだろうけどね Win32例外
0340デフォルトの名無しさん
2008/09/18(木) 18:03:06__tryは実装していない。__finallyのみ実装しているが
これは__tryに対応するものではない。
0341デフォルトの名無しさん
2008/09/18(木) 18:07:07ありがとー
WinAPI だからといって必ずしも全て利用可能ではない ってことか
ま、SEHはかなり特殊だから仕方ない部分ではあるな
0342336
2008/09/18(木) 18:22:33stract _stat → stract stat
_fstat() → fstat()
に変更したらBCCでも問題なく動きました。ありがとうございます。
本業はマイコン/ラダー屋なのもあって、こういった部分はあまり気にする機会がなく勉強になりました。
Boost覗いてみました。
C++はBCBでも殆どC記述で組むような状態でオブジェクト指向が身についてないので
サンプルを見ながら少しずつ導入していこうと思います。
0343デフォルトの名無しさん
2008/09/18(木) 19:12:50あるサンプルソースコードを入手して、
~~.slnを実行して、デバッグしたら動きました。
ファイル入出力をしようと思って、
メイン関数が書いてある.cファイルで#include <iostream>とすると、
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(35) : error C2059: 構文エラー : ':'
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(36) : error C2143: 構文エラー : '{' が ':' の前にありません。
が大量に出てきてしまいました。
インクルードしただけです。
何がいけなかったのでしょうか?
0344デフォルトの名無しさん
2008/09/18(木) 19:16:530345345
2008/09/18(木) 19:32:120346デフォルトの名無しさん
2008/09/18(木) 20:55:40┣親クラス及び全ての子クラスで使うデバッグ用クラス
┣子クラス
┣子クラス
・
・以下略
・
┗子クラス
┗子クラス
という構成なんですが、子クラスがデバッグクラスにアクセスする、定石のような方法ってどういうのがありますか?
今自分がやっているやり方は、子クラスをnewで作成した後に、デバッグクラスのポインタをchildcls->SetDebugCls( cls )みたいな感じで渡しています。
しかしそれだと、全ての子クラスにセットしなくてはならず、非常に手間がかかっています。
実際はデバッグクラス以外にも、全ての子クラスで使いたいクラスが数個あります。
良い方法があったら教えてください
0347デフォルトの名無しさん
2008/09/18(木) 21:13:310348346
2008/09/18(木) 21:25:09はい。全ての子クラスで1つのデバッグクラスを操作したいのです。
デバッグでそれぞれのクラスのデータを集計し、統計のようなものを出したいデバッグクラスなので、単一の方向でお願いします。
0349デフォルトの名無しさん
2008/09/18(木) 21:32:10基底クラスがそのデバッグクラスを包含するのじゃ駄目なの?
0350デフォルトの名無しさん
2008/09/18(木) 22:39:51それかシングルトン
0351デフォルトの名無しさん
2008/09/18(木) 22:58:27まぁグローバル変数が嫌なら、
デバッグクラスかそれへのポインタの
staticなメンバ変数でも用意すれば良いんじゃね?
0352デフォルトの名無しさん
2008/09/18(木) 23:12:31デバッグクラスが派生クラスにかかわらず単一なのは分かった
そのインスタンスは1個だけ?
それとも各インスタンスにつき1個ずつ?
いずれにしてもデバッグクラスを基底クラスの内部クラスとして定義して、
基底クラスの通常のメンバなり、静的メンバなりにそのデバッグクラスのインスタンスを持たせればいいと思うが
0353デフォルトの名無しさん
2008/09/18(木) 23:27:15まだエスパー歴が浅いから間違ってるかもしれんが
0354デフォルトの名無しさん
2008/09/19(金) 00:36:34ただし、RevChr関数の命令は1行で書かなくてはいけません。←ここ重要!
できた人から、提出するように。
って問題だされたんだけど。
0355デフォルトの名無しさん
2008/09/19(金) 00:43:55強引にやってみた。アホだ、俺。
(char>>4 + char<<4)
0356デフォルトの名無しさん
2008/09/19(金) 01:42:150357デフォルトの名無しさん
2008/09/19(金) 02:28:18WideCharToMultiByte 250ms
wcstombs 1720ms
あらかじめ計算しておいた配列を使う 2170ms
となって圧倒的にwinAPIが速かったです。 前にローケル設定しなくてwcstombsが速いとか間違えを書きました。
0358デフォルトの名無しさん
2008/09/19(金) 03:58:49その後、実際につかう数字で計算してみたところ、3次の項までは必要となりました。
しかし、logで計算するより5倍は速いので助かりました。
0359デフォルトの名無しさん
2008/09/19(金) 09:39:44class sum
{
int total;
public:
sum() : total(0) { }
void operator()(int i)
{ total += i; }
int get()
{ return total; }
};
sum s;
s = for_each(v.begin(), v.end(), s);
としたのですが、代入しなければならないことが気に入りません。
for_each<vector<int>::iterator, sum&>
(v.begin(), v.end(), s)
とすれば出来たのですが、やっぱり何か違う気がします。
何かいい表現方法は無いでしょうか?
0360デフォルトの名無しさん
2008/09/19(金) 10:23:41なんで代入したくないのか知らんが、↓のように書いたほうがシンプルでいいと思うけど。
sum s = for_each(v.begin(), v.end(), sum());
0361デフォルトの名無しさん
2008/09/19(金) 11:01:51int sum = std::accumulate(v.begin(), v.end(), 0, std::plus<int>());
0362デフォルトの名無しさん
2008/09/19(金) 11:28:360363デフォルトの名無しさん
2008/09/19(金) 11:30:31for_each を使って、集計をしなさい
0364デフォルトの名無しさん
2008/09/19(金) 11:37:370365デフォルトの名無しさん
2008/09/19(金) 11:51:24TR1を使えば以下のようにできる。
std::for_each(v.begin(), v.end(), std::tr1::ref(s) ) ;
ただし、sumを次のように変更する必要がある。
class sum
{
public :
typedef void result_type ;//ネストされたresult_typeという型で、関数オブジェクトの戻り値の型を表す
//省略
} ;
あるいは、unary_functionを継承すること。
0366デフォルトの名無しさん
2008/09/19(金) 12:02:09>v:\projects\mario\player.cpp(8) : error C2511: 'Player::Player(int,int,pleyer_type)' : オーバーロードされたメンバ関数が 'Player' にありません。
> v:\projects\mario\player.h(8) : 'Player' の宣言を確認してください。
となります。どこがおかしいのでしょうか?(見づらい質問でごめんなさい)
//Player.h
#include "Characters.h"
class Player : public Characters{
private:
enum player_type ptype;
public:
Player(void);
Player(int x,int y,enum player_type type);
};
//Player.cpp
#include "Player.h"
Player::Player(void){
this->x = 1;
this->y = 1;
this->ptype = PTYPE_NOM;
}
Player::Player(int x,int y,enum pleyer_type type){
this->x = x;
this->y = y;
this->ptype = type;
}
//Characters.h
class Characters{
enum char_type ctype;
public:
Characters(void);
Characters(int x,int y,enum char_type cp);
};
0367デフォルトの名無しさん
2008/09/19(金) 12:12:44× pleyer_type
○ player_type
ってことだと思うよ
0368デフォルトの名無しさん
2008/09/19(金) 12:15:56宣言と定義が違うって事だったんですか、回答有り難うございました
0369デフォルトの名無しさん
2008/09/19(金) 12:33:35int s = for_each(v.begin(),v.end(),sum()).get();
0370359
2008/09/19(金) 12:41:58>>365が
いいと思い、(自分の処理系ではTR1が使えないので)boost::refでやってみたら、
> error C2064: 1 引数を取り込む関数には評価されません。
と出て、ダメでした。
TR1とboostはほとんど一緒と聞いていたのに残念でした。
0371デフォルトの名無しさん
2008/09/19(金) 13:01:28TR1は、確かにBoostを念頭においているとはいえ、より考えられている。
というのも、Boostは単にreference_wrapperで包んでいるに過ぎないので、
このままでは関数オブジェクトとして、operator ()を適用できない。
そこで、TR1では、メタプログラミングを駆使して、単項か二項として呼べるようになっている。
0372デフォルトの名無しさん
2008/09/19(金) 13:22:41vector<int> r;
r.push_back(1);
r.push_back(2);
r.resize(1);
r.resize(2);
cout<<r[1];
0373デフォルトの名無しさん
2008/09/19(金) 13:29:320374デフォルトの名無しさん
2008/09/19(金) 13:47:280375デフォルトの名無しさん
2008/09/19(金) 15:54:53クラス側で解放処理をしなくても、STLを使っている範囲(newは使わない)では自動開放されますか?
class A{ public:vector<char> x; A(){x.resize(10000000);}};
main(){
map<string,string> w;
w["hage"].resize(10000000);
cout<<"enterを押すとstringのメモリを解放します。 ";
getchar(); w.erase("hage");
cout<<"メモリは解放されましたか。 "; getchar();
map<string,A> z;
z["piza"].x[0];
cout<<"enterを押すとクラスのメモリを解放します。 ";
getchar(); z.erase("piza");
cout<<"メモリは解放されましたか。 "; getchar(); }
0376デフォルトの名無しさん
2008/09/19(金) 16:01:47というのも、vectorでclear();使っても全く解放できないからです。swapしかないので。
0377デフォルトの名無しさん
2008/09/19(金) 16:10:250378デフォルトの名無しさん
2008/09/19(金) 16:11:03clearやresizeでメモリを解放する必要などない。
0379デフォルトの名無しさん
2008/09/19(金) 16:13:50list<vector<int> > l;
vector<int> v(10,0);
l.push_back(v);
とすると、
stl_list.h:435: warning: '__p' might be used uninitialized in this function
という警告が出ます。
l.insert(l.end(),v);
とすれば警告は出ないのですが、何が問題となっているのでしょうか?
0380デフォルトの名無しさん
2008/09/19(金) 17:51:32効率を上げるために、開放されないよ。
clearするってことは、次に直ぐ追加される可能性があるかもしれないってことで、バッファっは保持されるんだ。
0381デフォルトの名無しさん
2008/09/19(金) 18:39:19CON
NUL
PRN
をファイル名に使うとバグりますか?
0382デフォルトの名無しさん
2008/09/19(金) 18:43:250383デフォルトの名無しさん
2008/09/19(金) 18:45:05WindowsXP以上でAPIを使ったときバグりますか?
0384デフォルトの名無しさん
2008/09/19(金) 18:47:45エクスプローラーで書き換えられます。 問題出ますか?
0385デフォルトの名無しさん
2008/09/19(金) 19:04:12下のpはパスとして正常なんですけど・・・
これを変換する関数は無いですか?
char p[]="C:\\hoge_hoge\\..\\windows\\Notepad.exe";
system(p); //パスが有効か?
char q[300];
GetLongPathName(p, q, 300);
wcout<<p<<"\n->\n";
wcout<<q<<endl;
0386デフォルトの名無しさん
2008/09/19(金) 19:20:50char p[]="C:\\////\\hoge_hoge\\..\\windows\\Notepad.exe";
char q[300];
GetFullPathName(p, 300, q, NULL);
printf("%s\n", q);
0387デフォルトの名無しさん
2008/09/19(金) 20:34:56大文字を小文字に変換するにはどうしたら良いでしょうか?
0388デフォルトの名無しさん
2008/09/19(金) 20:47:410389デフォルトの名無しさん
2008/09/19(金) 21:00:05中国語・・・ABCDF・・・中国語
→中国語・・・abcde・・・中国語
ロシア語・・・FUNCTION・・・ロシア語
→ロシア語・・・function・・・ロシア語
0390デフォルトの名無しさん
2008/09/19(金) 21:02:36towlower() の動作は、現在のロケールの LC_CTYPE カテゴリに依存する。
この関数を Unicode 文字に対して使うのはあまり適切でない。なぜなら、
Unicode には大文字(upper case)・小文字(lower case)・タイトル文字(title
case) という 3 つの "case" が含まれているからである。
http://manpages.ubuntu.com/manpages/feisty/ja/man3/towlower.html
0391デフォルトの名無しさん
2008/09/19(金) 21:36:50wchar_t
us_tolower(wchar_t c)
{
if(c<='A' && c>='Z')
{
c=c-'A'+'a';
}
return c;
}
0392デフォルトの名無しさん
2008/09/19(金) 21:45:260393デフォルトの名無しさん
2008/09/19(金) 21:47:340394デフォルトの名無しさん
2008/09/19(金) 21:48:44なんか怪しいけど、せめてLを・・・
0395デフォルトの名無しさん
2008/09/19(金) 21:50:590396デフォルトの名無しさん
2008/09/19(金) 21:52:47ロシアや中国でも小文字になりますか?
0397デフォルトの名無しさん
2008/09/19(金) 21:55:510398デフォルトの名無しさん
2008/09/19(金) 21:59:15と
LCMapString
でやってみます。
0399デフォルトの名無しさん
2008/09/20(土) 02:19:190400デフォルトの名無しさん
2008/09/20(土) 02:38:34なんかヘッダが足らないみたいです
インストールの失敗?
英語体験版をいれて日本語で上書きしたらいいかな?
0401デフォルトの名無しさん
2008/09/20(土) 02:50:42wikiより。
実行に必要なライブラリやリンカなどは付属していないため、他のコンパイラの環境に寄生した形で実行される。
WindowsではMicrosoft Visual Studioが、LinuxではGCCが必要である。
0402デフォルトの名無しさん
2008/09/20(土) 02:52:460403デフォルトの名無しさん
2008/09/20(土) 17:52:54そのフォルダの中のsample.vcprojというのを実行すると、
VisualStadioが起動しました。
サンプルコードのはずなので、F5を押して実行すると、
「シンボル情報がありません:firefox.exeのデバッグ情報が見つからないか、
または一致しません。シンボルが読み込まれていません」
というウィンドウが表示されました。どうすればよいでしょうか?
0404デフォルトの名無しさん
2008/09/20(土) 17:57:330405403
2008/09/20(土) 18:10:55http://www.cs.umd.edu/~mount/ANN/
からann_1.1.1.zipをダウンロードして、
MS_Win32→sample→sample.vcprojを実行しました。
0406デフォルトの名無しさん
2008/09/20(土) 18:29:16Ctrl+F5とかで実行したら?
0407403
2008/09/20(土) 18:36:34プロジェクトの構成はDebugでした。
Ctrl+F5とすると、Firefoxが新しく起動しました。
プロジェクトの構成をReleaseにしてみて、
F5を押すと「デバッグセッションの実行可能ファイル」というウィンドウが出てきて、
「実行可能ファイル名」を選ばされました。
よく分からず、既定のWebブラウザを選んで実行しました。
それを過去にもやったため、Firefoxが動いているんだと思います。
「デバッグセッションの実行可能ファイル名」を何にすればよかったのでしょうか?
0408デフォルトの名無しさん
2008/09/20(土) 19:08:56>>407
落としたけど、スタートアッププロジェクトがdllになってない?
samleをスタートアッププロジェクトに設定しないと、VSからは起動できない。
あと、sampleをビルドして出来るのは、コマンドラインアプリだったので、
F5実行だと、DOS窓が一瞬出てすぐ消えた。
デバッグセッションの実行可能ファイル名で解決したいなら、
「展開したフォルダ\ann_1.1.1\MS_Win32\bin\ann_sample.exe」
じゃないかね
0409403
2008/09/20(土) 19:54:14F5実行で、DOS窓が一瞬出てすぐ消えた、ところまではできました。
「引数無しで実行」したときはエラーになるようなので、
コマンド引数に「-df data.pts -qf query.pts」と設定して
実行してみました。すると「cannot open data file」と表示されました。
すこし前進したようです。
あとはどうやってファイルを開くのか試行錯誤しているところです。
query.ptsというのは点のデータだと思います。
Test dataフォルダには「data_pts」がありますがちょっと違う。
これを読めばいいのか、または別のところにデータがあるのか。。。
0410デフォルトの名無しさん
2008/09/20(土) 20:12:01ってのがあるみたいだけど
0411デフォルトの名無しさん
2008/09/20(土) 20:13:07test1-data.ptsとtest1-query.ptsってのが転がってたんで、
それを「ann_1.1.1\MS_Win32\bin\」の下にコピってからDOS窓で
ann_sample.exe -df test1-data.pts -qf test1-query.pts
って打ったら動いたけど。
VCからだとカレントフォルダ分かりづらいから
別にDOS窓起動した方が良いんじゃない?
引数の設定にフルパスで書いても良いと思うけど。
まぁそろそろ飽きたんで引っ込む。
0412403
2008/09/20(土) 20:16:28長いことありがとうございました。
後は自分で進んでみます。
0413デフォルトの名無しさん
2008/09/20(土) 20:41:25コマンドラインの引数を、関数の引数に変換できますか
0414デフォルトの名無しさん
2008/09/20(土) 20:44:13そのまま貼り付けてコンパイルしたら動かないね
いやそも逆アセンブラするってなんだよって話だが
>コマンドラインの引数を、関数の引数に変換できますか
main関数の引数になります
0415デフォルトの名無しさん
2008/09/20(土) 20:50:17できないですか?
test.exe ファイル名 > 出力名
というツールを
char * test(char *ch){ アセンブラ }
という関数に出来ませんか
0416デフォルトの名無しさん
2008/09/20(土) 20:57:140417デフォルトの名無しさん
2008/09/20(土) 20:59:240418デフォルトの名無しさん
2008/09/20(土) 21:00:360419デフォルトの名無しさん
2008/09/20(土) 22:12:24関数が export されていて、インターフェイスが公開されているなら簡単にできるが、それ以外だと面倒
グローバル変数を使ってたりしたら「自作のほうが楽じゃね?」ってなるかもw
0420デフォルトの名無しさん
2008/09/21(日) 02:22:25こういうツールの作り方教えてください
圧縮ファイルをすべてのアプリに対してフォルダと認識させる方法です
wINDOWSエクスプローラのみなら昔からできたのですが
Zipファイルをマウントする?「Pismo File Mount Audit Package」
http://www.moongift.jp/2008/07/pismo_file_mount_audit_package/
0421デフォルトの名無しさん
2008/09/21(日) 03:16:01#include<math.h>
double simpson(double, double, double, double);
double func(double);
int main(void){
/* 必要な変数の定義をする */
double h,xkisu,xguu,s0,s1,s2,ans,x1,x2,n,x0,i;
scanf("%lf", &x1);
scanf("%lf", &x2);
printf("x1 = %f\n",x1);
printf("x2 = %f\n",x2);
/* 偶数の分割数を入力するまで繰り返す */
do{
scanf("%lf", &n);
printf("n = %f\n",n);
if ((n%2) != 0){
printf("!! Bunkatsu su ha gu-su- desu !!\n");
} else break;
} while (n%2!=0);
0422421
2008/09/21(日) 03:17:12上のは途中までのプログラムなのですが
コンパイルすると
22: 浮動小数点の不正な使用(関数 main )
25: 浮動小数点の不正な使用(関数 main ) とでます。
なぜでしょうか?
0423デフォルトの名無しさん
2008/09/21(日) 03:33:07nはintとかにしとけ。
0424デフォルトの名無しさん
2008/09/21(日) 04:52:19下記のようなコードを書いた場合、
static const char *teststr[6] = { "00000", "1111111111", "2", "3", "444", "555555" };
それぞれの文字列でピッタリ埋まるサイズでメモリが確保されて、
それらを指すポインタがteststrに格納されるのでしょうか?
VCで試したところ、確かにteststrの各配列に指定した文字列が格納されていたのですが、
ポインタのみを確保して、その位置のデータを破壊して、指定文字列を格納しているということはないでしょうか?
組み込み(ARM)での開発に使用しようかと思っています。
よろしくお願いします。
0425デフォルトの名無しさん
2008/09/21(日) 05:02:090426デフォルトの名無しさん
2008/09/21(日) 05:12:150427デフォルトの名無しさん
2008/09/21(日) 05:16:120428デフォルトの名無しさん
2008/09/21(日) 07:28:28破壊はしない。
0429デフォルトの名無しさん
2008/09/21(日) 13:51:14> それぞれの文字列でピッタリ埋まるサイズでメモリが確保されて、
> それらを指すポインタがteststrに格納されるのでしょうか?
そのとおり。
文字列はROM、ポインタはRAMに置かれる。
0430デフォルトの名無しさん
2008/09/21(日) 15:26:49ポインタが RAM にいっちゃうのは teststr に const が付いてないからだよね?
0431デフォルトの名無しさん
2008/09/21(日) 15:27:21関数を
void foo(char* filename);
と宣言して使うときに
foo("data.dat");
とやると deprecated conversion string constant to char みたいな
警告が出ます。これは何が不味いのでしょうか?
0432デフォルトの名無しさん
2008/09/21(日) 15:28:02const 付けたらいいんじゃね?
0433デフォルトの名無しさん
2008/09/21(日) 15:28:17文字列リテラルは書き換えできないから char const で受け取らないとあぶない。
0434デフォルトの名無しさん
2008/09/21(日) 15:34:55エスケープを使うとエラーになり、そのまま使うと文字列リテラルとして解釈されてしまいます。。。
0435デフォルトの名無しさん
2008/09/21(日) 15:35:43foo(const char* filename);
と宣言すればよいということでしょうか?
0436デフォルトの名無しさん
2008/09/21(日) 15:35:48状況が見えんな。エラーになるコードとエラーメッセージをどうぞ。
0437デフォルトの名無しさん
2008/09/21(日) 15:37:21質問なのですが列和と行和を求めるプログラムで、
列和も行和も同じループ内で処理できるのは何故なのでしょうか?
0438デフォルトの名無しさん
2008/09/21(日) 15:37:56foo の中で filename の指す先を書き換えないんなら、それでいいはず。
っていうか、試せよ。
0439デフォルトの名無しさん
2008/09/21(日) 15:39:09日本語でどうぞ
0440デフォルトの名無しさん
2008/09/21(日) 15:39:55それだけ言われてもわかんねーよw
二次元配列を一次元配列にキャストしてるとか?
0441437
2008/09/21(日) 15:47:42考察の一部なんですが、これ以外文章にしようがなくて困っています
プログラムをあげたほうがいいでしょうか?
0442デフォルトの名無しさん
2008/09/21(日) 15:49:34まだ相談したいならコード晒せ。あの文章じゃ無理だ。
コード晒せば答えが得られる保証はないけどな。
0443デフォルトの名無しさん
2008/09/21(日) 16:02:09二重ループは行列の全ての要素にアクセスするための手段でしかないから
その扱いについては制限されない
あとは各行和各列和を格納する配列を定義して要素に応じてそれぞれ適切に加算していくだけ
0444441
2008/09/21(日) 16:07:01No.7729です。よろしくお願いします。
0445デフォルトの名無しさん
2008/09/21(日) 16:38:13for(i=0;i<3;i++)
table[3][j]+=table[i][j];
これ行和しか求めてないよ。ソース中には列和を求める部分は見当たらなかったけど。
0446444
2008/09/21(日) 18:52:32列和の計算を入れ忘れている事に気付きました。ありがとうございます
この行和と列和を求めるプログラムの考察で、
列和も行和も同じループ内で処理できるのは何故かと言う問いなのですが
理由は>>443でOKもらえますかね・・・?
0447デフォルトの名無しさん
2008/09/21(日) 19:11:38>>443は日本語がちょっとおかしいのでちゃんとした文章を自分で考えてくれろ
正解かどうかは知らないし
0448デフォルトの名無しさん
2008/09/21(日) 19:54:02MinGWで色々やっているのですが、間接継承の関係にあるクラスのprotectedメンバにアクセスしているプロググラムを実行すると、フリーズしてしまいます。
アドバイス頂けると幸いです。
0449デフォルトの名無しさん
2008/09/21(日) 20:29:22フリーズするならそれはまったく別の問題。
0450デフォルトの名無しさん
2008/09/21(日) 20:40:54フリーズならどこかで無限ループしてるんじゃ
0451デフォルトの名無しさん
2008/09/21(日) 21:27:02これで作ったCOMのスマートポインタもAttachで入れないと
カウントがずれるですか?
0452デフォルトの名無しさん
2008/09/21(日) 23:02:33どのようにしたら良いですか? マルチスレッド対応の方法教えてください
こういう警告と同じ箇所で英語のエラーがでます。
マルチスレッド アプリケーションのコンストラクタでローカル静的変数を使うことは危険
0453デフォルトの名無しさん
2008/09/21(日) 23:08:570454デフォルトの名無しさん
2008/09/21(日) 23:59:27マルチスレッド関係なく動的に確保しる。
0455デフォルトの名無しさん
2008/09/22(月) 00:44:372個以上同時に使われるとバッファが壊れますが、どうしたらいいでしょうか?
0456デフォルトの名無しさん
2008/09/22(月) 00:49:20とりあえずマルチスレッドプログラムを組む場合は同期オブジェクトを勉強してください。
0457デフォルトの名無しさん
2008/09/22(月) 01:34:08C++で横スクロールするアクションゲームっぽいもの
作ってるのですがキャラクターをクラスで扱っていて
場面ごとの関数1つ1つにクラスの変数やメソッドを使うから
インスタンス定義ってのをやらなきゃいけないようで
そうするとそのせいで場面の移り変わりのときに
それまで使っていた変数が初期化されてしまって
ttp://www.dotup.org/uploda/www.dotup.org0173.jpg
このようになってしまいますよね
キャラクターのクラスだけでなく他にも場面やステージを
隔てて初期値に戻ると困るものを保存したり引き継いだり
できればいいのですがどうすればいいのでしょうか・・・
0458デフォルトの名無しさん
2008/09/22(月) 01:38:03保存したり引き継いだりすればいいよ。
コンストラクタ含めて関数には引数が渡せるだろ。
その画像のプレゼン能力はすばらしい。
0460デフォルトの名無しさん
2008/09/22(月) 01:45:46次のシーン初期化時に、シーンのオブジェクトコンテナに移し変える
0461デフォルトの名無しさん
2008/09/22(月) 03:08:24ファイルオープンで、ファイルから値を読込んでもう一つのファイルにその値を書込むプログラムで、
読込用はテキストファイル(.txt)、書込用はバイナリファイル(.bin)を用いました。
上記の2つのファイルサイズは少量ですけど違いました。
この違いは何によるものなんでしょうか。
0462デフォルトの名無しさん
2008/09/22(月) 03:13:070463デフォルトの名無しさん
2008/09/22(月) 03:52:47テキストファイルから「1 2」という値を読み込みバイナリファイルに書き込んで
ファイルをエディタで開くと「01 00 00 00 02」と表示されますが、
つまりは書き込みがバイナリファイルだとスペースにもコードがあるから
ファイルサイズが大きくなる・・・ということでいいんでしょうか・・・?
0464デフォルトの名無しさん
2008/09/22(月) 04:06:47読み込んで形式変えて書き込んでるんだから、そもそも同じになるわけがないな。
0465デフォルトの名無しさん
2008/09/22(月) 04:30:31他のプロセスのメモリを監視するプログラム作ろうとしています。
ReadProcessMemoryで値を取得することはできたのですが、
できればそのメモリアドレスの値が更新された時に取得を実行したいです。
この「メモリアドレスの値が更新された」というイベントを取得することは可能でしょうか?
0466デフォルトの名無しさん
2008/09/22(月) 04:54:21コンストラクタならfalseー緒に渡せば、AddRefしないよ。
operator=は無理だな。
0467デフォルトの名無しさん
2008/09/22(月) 07:22:34チートツールはほどほどにしとけよ
0469デフォルトの名無しさん
2008/09/22(月) 12:42:19>329
ありがとうございます。
u_char *ucharAdr;
ucharAdr = (u_char *)(gulngUpdataAddress & 0x0fffffff) + 0x0c800000;
memcpy( ucharAdr, gushtUpdataArea, gulngUpdataDataCount * sizeof(short));
で、いけました。
0470デフォルトの名無しさん
2008/09/22(月) 12:45:08MoveTo、LineToを使用せずに描きたいです。
0471デフォルトの名無しさん
2008/09/22(月) 12:48:250472デフォルトの名無しさん
2008/09/22(月) 13:13:47おいらのCImageなら、メンバにLine(CPoint from, CPoint to)があるからそれを使えるよ。
でも、あんたの言っているCImageにそれがあるかどうかは知らんけどね。
0473デフォルトの名無しさん
2008/09/22(月) 19:04:58const char * str2 = "str";
"str"が配置されるのは、前者の場合、配列に格納するコードのところ
後者では文字列を置いておくところだと思うのですが、どういうときに、どちらを選べばいいのでしょうか
自分で考えたところでは、
・上の場合は、コンパイル時に配列のサイズが決まるのでstrlenなどを使う必要がない
・下の場合は、自動変数の確保がポインタだけですむ(速い?)
というちがいだと思うのですが、ほかにも違いがあるのでしょうか
0474デフォルトの名無しさん
2008/09/22(月) 19:18:10後者は str2 = "another" のような代入が可能になってしまう。たぶん意図したものじゃないだろう。
static const char str3[] = "str";
↑これなら挙げられた前者と同じメリットを得つつ、後者のメリットを上回る(自動変数の確保はゼロ)。
0475デフォルトの名無しさん
2008/09/22(月) 19:46:370476デフォルトの名無しさん
2008/09/22(月) 20:16:33ありがとうございます。
475さんのはstr2が同じものをさし続けるようにするのですね。
474さんのは静的変数の初期化に、コストを預けてるわけですね。
0477デフォルトの名無しさん
2008/09/22(月) 20:31:51str3 の初期化にコストなんか要らないよ。どのケースでも必要になる文字列リテラルの
実体を直接割り付ければいいだけ。
0478デフォルトの名無しさん
2008/09/22(月) 22:16:49#define str4 "str"
0479デフォルトの名無しさん
2008/09/23(火) 22:01:02クラスや構造体の初期化子リストに表示できるのは、メンバか基本クラスだけです。
規定クラスのメンバはどうやって初期化するですか?
class A
{
public:
A(int apple)
protected:
int m_banana;
}
class B : public B
{
B(int apple)
: A(apple), m_banana(8) ←ここ
{
}
}
0480デフォルトの名無しさん
2008/09/23(火) 22:04:32class A
{
public:
A(int apple)
protected:
A(int apple, int banana) : m_banana(banana) {}
int m_banana;
};
class B : public A
{
B(int apple)
: A(apple, 8)
{
}
};
0481デフォルトの名無しさん
2008/09/23(火) 22:05:16ども
0482デフォルトの名無しさん
2008/09/24(水) 07:57:18例外を勉強しているのですが、例外を発生させたときに、
catchで例外を処理しても、デバッガに例外があったことが出力されます
catchで例外を処理するときは、
デバッガの出力に例外が発生したことが出力されるのを防ぎたいですが、どのようにすればいいでしょうか
0483デフォルトの名無しさん
2008/09/24(水) 12:37:12出力って、例外時のデバッガのダイアログ?だったら、デバッグ->例外で設定できる
デバッグ出力の例外のレポートだったら気にするな。レポートが出すぎて困るのだったら例外の使い方が間違っている。
0484482
2008/09/24(水) 13:18:40れす、ありがとうございます。後者です。
例外のつかいかたについては勉強していくところです。
もし、テストケースとかを今後記述するような場合に、デバッグ出力でOFFにできないのか探しています。
0485デフォルトの名無しさん
2008/09/24(水) 14:19:16Visual Studio のスレで聞いたほうがいいんじゃないかな?
0487482
2008/09/24(水) 15:56:25ありがとうございます。移動します。
0488デフォルトの名無しさん
2008/09/24(水) 16:35:28これを同じことを NET 1.1でやりたいんですが どうすればいいんですか?
0489デフォルトの名無しさん
2008/09/24(水) 16:39:340490デフォルトの名無しさん
2008/09/24(水) 17:15:17すいません><
具体的なコードを教えてくれると助かります^^;
0491デフォルトの名無しさん
2008/09/24(水) 17:24:230492デフォルトの名無しさん
2008/09/24(水) 19:38:050493デフォルトの名無しさん
2008/09/24(水) 20:14:44ちゃんと確かめて無いので間違ってるかもだけど、
_tstofは内部でatofや_wtofを使ってるので、それらを使う
ために必要な<stdlib.h><math.h><wchar.h>をincludeする必要があったかも?
0494デフォルトの名無しさん
2008/09/24(水) 23:14:43その三つをインクルードしてみましたけど駄目でした。
環境の問題でこういう事ってありますかね?
0495デフォルトの名無しさん
2008/09/24(水) 23:56:07その理屈はおかしいよ
0497デフォルトの名無しさん
2008/09/25(木) 06:09:59がダウンロードできません
どなたか入手方法教えてください
0498デフォルトの名無しさん
2008/09/25(木) 06:32:510499デフォルトの名無しさん
2008/09/25(木) 06:37:590500デフォルトの名無しさん
2008/09/25(木) 21:54:04includeする順番を変えてみたらどうだろう?
tcharではなかったかもしれないけど、以前にそんな感じの現象になったことがある。
そのときは、なにかのバージョン番号とかが順番によっては未定義になって
起きた現象だった。tchar.hの中をみて、どのように定義されているか確認すると
いいかもね。
0501デフォルトの名無しさん
2008/09/26(金) 01:31:260502デフォルトの名無しさん
2008/09/26(金) 01:49:00C++/CLI言語で出来ることがわかりました
0503デフォルトの名無しさん
2008/09/26(金) 19:45:12引数付きコンストラクタを呼び出したいんですが、何か方法はありますか?
Const なメンバ変数のために初期化リストを使いたいんですが・・・。
CHoge *hoge;
hoge = new CHoge[2] //ここでHoge( X )のように引数を指定したい
0504デフォルトの名無しさん
2008/09/26(金) 20:18:130505デフォルトの名無しさん
2008/09/26(金) 20:20:290506デフォルトの名無しさん
2008/09/26(金) 21:32:03setRangeをする場所がわかりません。
コンストラクタの中でやるとエラーで落ちてしまいます。
OnInitDialogでやっても何もダメでした。
何かよい方法は無いでしょうか?
IMPLEMENT_DYNAMIC(CPropOption, CPropertyPage)
CPropOption::CPropOption()
: CPropertyPage(CPropOption::IDD)
, m_xvEditPenthick(_T(""))
, m_xvSliderPenthick(0)
{
// m_xcSliderPenthick.SetRange(0,10); //なぜかこれをつけると壊れる
}
VC 2003です
0507デフォルトの名無しさん
2008/09/27(土) 00:49:00ありません
0508デフォルトの名無しさん
2008/09/27(土) 07:16:590509デフォルトの名無しさん
2008/09/27(土) 07:55:01VC++2008ではchar型は、SJISかEUCであってUNICODEは表せませんか?
0510デフォルトの名無しさん
2008/09/27(土) 07:59:350511デフォルトの名無しさん
2008/09/27(土) 08:03:100512デフォルトの名無しさん
2008/09/27(土) 08:32:29ただのバイト列だからなんでも入るよ
0513デフォルトの名無しさん
2008/09/27(土) 08:51:14charは只の8bitの数値。それをどの文字コードで解釈するかってこと。
文字コード表を比較してください
0514デフォルトの名無しさん
2008/09/27(土) 13:43:040515デフォルトの名無しさん
2008/09/28(日) 02:38:26同一クラスのprivateメンバ変数へアクセスできない
書き方が悪いのか、それともそういうもんなの?
0516デフォルトの名無しさん
2008/09/28(日) 02:54:48thisとか
0517デフォルトの名無しさん
2008/09/28(日) 03:10:16class AAA {
private:
int m_a;
public:
static void func(int arg, AAA* pinst);
};
void AAA::func( int arg, AAA* pinst)
{
pinst->m_a = arg;
}
こんな感じか
0518デフォルトの名無しさん
2008/09/28(日) 04:00:18Hoge() {}
Hoge(const Hoge&) { Sleep(1000); }
Hoge& operator=(const Hoge&) { Sleep(1000); return *this;}
};
もしこのくらいコピーにコストがかかるクラスをSTLのコンテナに入れる場合、どうするのが良いですか。
特にvectorだとpush_backしていくうちに、サイズ増やすために全部コピーしたりしますよね。(listだとそういうことはないのでしょうか)
ポインタ(std::vector<Hoge*>とかstd::vector<std::tr1::shared_ptr<Hoge> >)で管理するのが普通ですか。
0519デフォルトの名無しさん
2008/09/28(日) 05:00:37listやset、mapはpush_back(insert)しても新たにコピーされることは無い
ただまぁvectorと同じようには使えないので、boost::ptr_vectorあたりがお手軽か?
0520デフォルトの名無しさん
2008/09/28(日) 08:00:28そのとおり、shared_ptrが無難
0521デフォルトの名無しさん
2008/09/28(日) 20:52:45そうするとクラスAに全く関係のないクラスBのメンバの値がおかしくなりました。
調べていくと、
クラスBのコンストラクタで初期化完了
↓
クラスAのコンストラクタでnewを使う
↓
クラスBのメンバの値がおかしくなる
という流れでした。
これは何が原因なのでしょうか?
ちなみにクラスAのnew用関数ではクラスBは全く使用していません。
0522デフォルトの名無しさん
2008/09/28(日) 21:01:430523デフォルトの名無しさん
2008/09/28(日) 21:08:37プログラム終了時のみにしか呼ばれてませんでした
0524デフォルトの名無しさん
2008/09/28(日) 21:09:04operator new のオーバーロードをしてるわけじゃないよな
0525デフォルトの名無しさん
2008/09/28(日) 21:12:000526デフォルトの名無しさん
2008/09/28(日) 21:13:28多次元配列なのでまとめてるんです
void New()
{
int i;;
for(i = 0; i < MAX; i++)
p[i] = new int [SIZE];
}
こんなのです
0527デフォルトの名無しさん
2008/09/28(日) 21:15:240528デフォルトの名無しさん
2008/09/28(日) 21:23:12ググって見たんですけどやり方が今一分かりませんでした。
クラスA・Bどちらのインスタンスもグローバル変数でクラスBのほうが先に作られます。
0529デフォルトの名無しさん
2008/09/28(日) 21:23:20pの領域は確保してるか?
0530デフォルトの名無しさん
2008/09/28(日) 21:33:09pは int *p[SIZEX]; と宣言してます。
0531デフォルトの名無しさん
2008/09/28(日) 21:41:51VisualStudioだったら、ウオッチにCLASS Bのインスタンスを表示させてステップ実行すると、値が変わったところで赤くなる。
0532デフォルトの名無しさん
2008/09/28(日) 21:51:48クラスAのコンストラクタでnew用の関数が終わったときに値が変わりました。
原因がつかめないのでnewする前にクラスBの値を保存しておいて終わったらそれを代入することにしました。
皆さんありがとうございました。
0533デフォルトの名無しさん
2008/09/28(日) 22:12:57解決してから進まないと、あとで手が着けられない状態になるよ
0534デフォルトの名無しさん
2008/09/28(日) 22:13:29MAX > SIZEX
になってない?
0535デフォルトの名無しさん
2008/09/28(日) 22:22:12思いっきりなってました・・・
何で気づかなかったんだろう・・・
直したら正常になりました。
ありがとうございました。
0536デフォルトの名無しさん
2008/09/29(月) 01:08:29MFC利用
でExcelファイルの読み書きをexcelのtypelibを使って行っているんですが、
CRangeオブジェクトのメンバ
CString get_Address(VARIANT RowAbsolute, VARIANT ColumnAbsolute, long ReferenceStyle, VARIANT External, VARIANT RelativeTo)
のReferenceStyleに設定すべき定数がどこにあるのかわからず困っています。
XlReferenceStyleをxlA1にすれば良いらしいのですが。
CRangeの"C8"などのアドレスを返す代替手段があればそちらでもかまわないです。
他の部分はほとんどなんとかなったんですがこれだけどうしようもないです。
よろしくお願いします。
0537デフォルトの名無しさん
2008/09/29(月) 10:10:33インポートライブラリを作るってこと?できるよ。
環境によって違うけど。
0538デフォルトの名無しさん
2008/09/29(月) 12:01:34std::localeとかimbue()つかってもダメで探してもlocaleのことしか見つかりません。
環境はVC2008使ってるけどやはりVCのバグ?fopenとか_openとか使えってことですかね?
0539デフォルトの名無しさん
2008/09/29(月) 12:05:070540デフォルトの名無しさん
2008/09/29(月) 12:22:23何しろ、一文字は7bitであるという前提が頭からこびりついて離れない西側諸国の連中が作ったんだから。
0541538
2008/09/29(月) 12:24:000542デフォルトの名無しさん
2008/09/29(月) 12:29:31wfstreamはファイルの「中身」をワイド文字で読み書きしたいときに使うんだ
ファイル名の問題とは関係ない
つうか>>539嫁
VC8以降は、fstreamにワイド文字版コンストラクタがあるんだよ
0543541
2008/09/29(月) 12:34:340544543
2008/09/29(月) 12:54:55>>542ご指摘ありです。
>>539理解できてなくてすません。
ところでVC8以降ってことはVC依存のコンストラクタ?他のビルダーとかだとマルチバイトで指定してもおk?
0545デフォルトの名無しさん
2008/09/29(月) 13:02:17少なくとも非標準
他の環境でも利用したいのならboost使え
0546544
2008/09/29(月) 13:14:550547デフォルトの名無しさん
2008/09/29(月) 14:39:12C++の開発環境で、PCに『Visual Studio 2005』が入っていたのでそれを使おうとしたのですが、いまいち上手く使えません。
Visual Studio 2005 について解説しているサイトを見ながら設定し、それにのっているプログラムを丸写ししてみたのですが、ビルドが上手くいかなかったり、実行してもエラーが出たり出なかったりでよくわからない状態です。
これ以外で無料で使えて、それでいて使いやすい開発環境はありますか?
0548デフォルトの名無しさん
2008/09/29(月) 15:19:220549デフォルトの名無しさん
2008/09/29(月) 15:39:47一歩ずつ進めてみては
0550デフォルトの名無しさん
2008/09/29(月) 20:20:09VS2005は簡単な部類だからあきらめないでね。
0551デフォルトの名無しさん
2008/09/29(月) 20:23:042008を入れて、この本を買いなさい。
http://www.amazon.co.jp/dp/4891005823
http://www.amazon.co.jp/dp/4891005769
0552デフォルトの名無しさん
2008/09/29(月) 20:25:450553デフォルトの名無しさん
2008/09/29(月) 20:56:57買うならこれだ。
http://www.amazon.co.jp/dp/0470843993
0554デフォルトの名無しさん
2008/09/29(月) 21:01:45周囲に訊く人間がいなかったら、バカっぽくても画面写真が載りまくりのような本を見るしかない。
0555デフォルトの名無しさん
2008/09/29(月) 21:19:190556536
2008/09/30(火) 00:40:35enum XlReferenceStyle
{
xlA1 = 1,
xlR1C1 = -4150
};
でした。全て解決しました。
0557デフォルトの名無しさん
2008/09/30(火) 03:31:12コンストラクタは出来ませんか?
0558デフォルトの名無しさん
2008/09/30(火) 03:34:390559デフォルトの名無しさん
2008/09/30(火) 03:47:13int a;
public: cls(){・・・} };
というクラスを
class {
int a;
public: } hensuu;
と書いた場合に、初期化が出来るか教えてください
0560デフォルトの名無しさん
2008/09/30(火) 04:12:460561デフォルトの名無しさん
2008/09/30(火) 07:25:39後者にコンストラクタは定義できませんか? 構造体にしないのは初期化したいからですよ。
0562デフォルトの名無しさん
2008/09/30(火) 07:27:22構造体にすれば初期化できるよw
0563デフォルトの名無しさん
2008/09/30(火) 07:29:540564デフォルトの名無しさん
2008/09/30(火) 07:43:16PODの初期化のルールからもはずれるから初期化されないと思う。
第一privateなint a;はどこからもさわれない、そこで警告なりなりラーなりになるような。
0565デフォルトの名無しさん
2008/09/30(火) 07:47:180566デフォルトの名無しさん
2008/09/30(火) 07:57:35グローバル変数としてhensuuがあったら初期化ずみ。
ローカル変数としてhensuuがあったら未初期化。
このへんは普通の変数と同じ考え方でいい。
あとはPODでググる。PODならnewを使った場合にコンストラクタなしでも初期化される。
それから新規の質問以外はsageる。
0567デフォルトの名無しさん
2008/09/30(火) 08:07:47int id;
char *name;
} table[] = {
{ 0, "zero", },
{ 1, "ichi2, },
};
が出来るのだから
デフォルトの公開性が違うだけのclassでも
class {
public:
int id;
char *name;
} table[] = {
{ 0, "zero", },
{ 1, "ichi2, },
};
と出来るだろ。
やったことないけど。
0568デフォルトの名無しさん
2008/09/30(火) 08:14:06そこまで書いたらやってみればいいよwww
0569デフォルトの名無しさん
2008/09/30(火) 08:15:04なんでint a; が何でprivateなのだろ。
publicならPODだから、newやhoge xx = {} で初期化可能になる。
0570デフォルトの名無しさん
2008/09/30(火) 08:18:42class cls{
int a;
public:
cls(){a=10;} };
っていうのは出来ますけど、クラス名無しだと標準のコンストラクタ名が使えないですけど
なんとか出来ますか?っていう質問です。
0571デフォルトの名無しさん
2008/09/30(火) 08:21:590572デフォルトの名無しさん
2008/09/30(火) 08:28:57つーかいちいちあげるな
0573デフォルトの名無しさん
2008/09/30(火) 08:30:28無名クラスではコンストラクタは作れないです
もし名前空間を汚染したくないだけであれば無名名前空間を使うのも手です
0574デフォルトの名無しさん
2008/09/30(火) 08:43:280575デフォルトの名無しさん
2008/09/30(火) 09:22:14関数chk()の戻り値がFALSEになるまで待つにはどうしたらいいですか?
0576デフォルトの名無しさん
2008/09/30(火) 09:26:520577デフォルトの名無しさん
2008/09/30(火) 09:40:570578デフォルトの名無しさん
2008/09/30(火) 12:26:27戻りが変わった可能性があることをイベントを使って検出してから見にいくといい。
OSのAPIにはそういうイベント関係の関数が多数ある。
0579デフォルトの名無しさん
2008/09/30(火) 12:36:18PODをクリアするテンプレートクラスを作って、それをクラスに所有させる。するとデフォルトコンストラクタで初期化できるようになる。
template<class T)
class tclear
{
T a;
public:
tclear()
:a(0)
{
}
};
class X
{
tclear<int> a;
};
0580デフォルトの名無しさん
2008/09/30(火) 15:54:03SSEのインラインアセンブラとか組み込み関数を使うと、/archとか/Qxとかに関わり無くなぜか勝手に拡張命令を使うみたいなんで困ってます><
インラインアセンブラはともかく組み込み関数は汎用命令で何とかしてくれると思ってたのに・・・
汎用命令以外吐かないようにする方法を教えてください、よろしくお願いします。
0581デフォルトの名無しさん
2008/09/30(火) 17:28:520582デフォルトの名無しさん
2008/09/30(火) 18:14:320583デフォルトの名無しさん
2008/09/30(火) 20:23:58オレが使いたいのはSSSE3(_mm_hadd_epi16)までなんでチョットまずいかなと・・
俺自身SSSE3が動かないPCも使ってるし困るんです><
てかQaxがマトモに機能してれば困らない事に気付いたよ!!
ICLがコピーと論理演算位しかベクトル化してくれないのが全部悪いんだ!!!
型が複数あると出来ないとか、無理矢理全部intでやったら複雑すぎとかふざけてるとしか思えない
てことで普通の自動ベクトル化があるコンパイラ教えてください、お願いします。
0584デフォルトの名無しさん
2008/09/30(火) 21:35:54WindowsXPです。
0585デフォルトの名無しさん
2008/09/30(火) 21:38:290586デフォルトの名無しさん
2008/09/30(火) 21:51:200587デフォルトの名無しさん
2008/09/30(火) 22:01:530588デフォルトの名無しさん
2008/09/30(火) 22:16:51それは無理。
GetTempFileNameの作ったファイルを消してディレクトリを作らないといけないから、
その間に他のプロセスに割り込まれる可能性がある。
0589デフォルトの名無しさん
2008/09/30(火) 23:15:32GetTempdir(){
wchar_t w[1000], z[1000];
GetTempPathW(1000, w);
if(!GetTempFileNameW(w, L"aa", 0, z) ) {
wcscpy(w,L".\\temp\\"); CreateDirectoryW(w,NULL);
if(!GetTempFileNameW(w, L"aa", 0, z) )
wcscpy(w,L"c:\\temp\\"); CreateDirectoryW(w,NULL);
}
wchar_t ch[9];
for(int n=0;n<100000;n++){
swprintf(ch,L"aa%06d",n);
wcscat(w,ch); CreateDirectoryW(w,NULL);
if( (GetFileAttributesW(w)&FILE_ATTRIBUTE_DIRECTORY) )break;
w[wcslen(w)-8]=0;}
}
0590デフォルトの名無しさん
2008/09/30(火) 23:26:38wchar_t ch[9];
for(int n=0;n<100000;n++){
swprintf(ch,L"aa%06d\\",n);
wcscat(w,ch);
int flg=GetFileAttributesW(w);
if( flg==-1 || !(flg&FILE_ATTRIBUTE_DIRECTORY) )
{CreateDirectoryW(w,NULL); break;}
w[wcslen(w)-9]=0;
0591デフォルトの名無しさん
2008/09/30(火) 23:30:250592デフォルトの名無しさん
2008/10/01(水) 04:40:030593デフォルトの名無しさん
2008/10/01(水) 21:41:36作ったり作らなかったりする。
MSDN嫁あほ
0594デフォルトの名無しさん
2008/10/01(水) 23:21:58グローバル変数でstatic付けるのと付けないのと、どんな違いがあるのでしょうか。
0595デフォルトの名無しさん
2008/10/01(水) 23:28:51その名前がコンパイル単位の外から見えるかどうかが変わる。
C++ では無名の namespace に入れるのが推奨されてる。
0596デフォルトの名無しさん
2008/10/01(水) 23:34:01つけると静的になり、ファイルスコープになる。
つまり、外部に公開しないで済む。
0597デフォルトの名無しさん
2008/10/02(木) 04:58:54クラス定義はどのように記述すればいいんでしょうか?
0598デフォルトの名無しさん
2008/10/02(木) 05:15:16class Deriv : public Base<T>
こうだろうか?
0599デフォルトの名無しさん
2008/10/02(木) 05:19:28template <class T>
class Base {
T a;
public:
Base(T b) : a(b) {}
void print() const {
std::cout << a << std::endl;
}
};
template <class T>
class Derived : public Base<T> {
T c;
public:
Derived(T a, T b) : Base<T>(a), c(b) {}
void print() const {
Base<T>::print();
std::cout << c << std::endl;
}
};
int main()
{
Derived<int> d(1, 2);
d.print();
}
0600デフォルトの名無しさん
2008/10/02(木) 06:48:15できました。ありがとうございます。
0601デフォルトの名無しさん
2008/10/02(木) 09:35:56実行中どういう例外を吐いたかログを取るような仕組みを組みこんだりするのでしょうか?
その場合、どういう方法でログ取りの仕組みを実装するのがよいでしょうか?
0602デフォルトの名無しさん
2008/10/02(木) 10:29:090603デフォルトの名無しさん
2008/10/02(木) 16:47:320605デフォルトの名無しさん
2008/10/02(木) 18:31:590606デフォルトの名無しさん
2008/10/02(木) 19:44:00ファイルへの書き込みを行っています。一定時間間隔で複数のデータをサンプリングしてファイルへ書き込んで
いるのですが、メインスレッド終了時に、同時刻上のデータがすべて書き込み終わっている様にしたいのです。
ファイル書き込みスレッドを終了させた場合、どこまで処理を終えているのか確定できませんが、どのようにコントロール
するのが一般的なのでしょうか。よろしくお願いします。
0607デフォルトの名無しさん
2008/10/02(木) 19:46:01fflush 相当のことをすればいいんじゃないかと
0608デフォルトの名無しさん
2008/10/02(木) 19:57:36書き込みスレッドにイベントを送って、書き込みスレッドがファイルをクローズしその後スレッド終了するようにすればいい。それを待ってwinmainのスレッドを終了させる。
0609デフォルトの名無しさん
2008/10/02(木) 22:00:180610デフォルトの名無しさん
2008/10/02(木) 22:52:18クラスの一番最初のメンバ変数をsortを使って
昇順や降順に変更したいと思っています
何かいいやり方はないでしょうか?
0611デフォルトの名無しさん
2008/10/02(木) 22:55:20使えるリストなのかは知らないけど
0612デフォルトの名無しさん
2008/10/02(木) 22:55:44STLを使おう
0613デフォルトの名無しさん
2008/10/02(木) 22:57:42豆知識
スレッドの実行が終わると、スレッドのハンドルがシグナル状態になる。結構便利
0614デフォルトの名無しさん
2008/10/02(木) 23:27:100615デフォルトの名無しさん
2008/10/02(木) 23:37:04文章の酷さが気になった
もう少し読み書きしようぜ
0616デフォルトの名無しさん
2008/10/03(金) 02:04:13return a++ * ++a;
}
という関数があるときに
hoge(5)
とすると、Return値は5×6で30になると思ったんだけど、g++とVC++の両方で
答えが36になりました。これってどうしてでしょうか?
どうかお願いします。
0617デフォルトの名無しさん
2008/10/03(金) 02:20:56それは未定義動作なのでそういうコードは書いちゃいけないけど、
あえてコンパイラの気持ちを大便するなら、
1. a++を発見。「評価後にaの値を+1する」と覚えておく
2. ++aを発見。「評価前にaの値を+1する」と覚えておく
3. コード生成開始
4. 評価前なのでaの値を+1するコードを生成
5. a*a のコードを生成して、その結果が返り値となるようにする
6. aの値を+1するコードを生成する。意味がないから最適化で削除されるかも。
0618デフォルトの名無しさん
2008/10/03(金) 02:23:420619デフォルトの名無しさん
2008/10/03(金) 03:35:140620デフォルトの名無しさん
2008/10/03(金) 04:08:33で const の T を受け取った時に、
クラス内部で非 const な T 型を使いたい場合には
どうすればいいんでしょう?
例えば Hoge< const string > というように呼ばれたとき、
内部で(非 const な) string 型を扱いたいのです。
0621デフォルトの名無しさん
2008/10/03(金) 07:54:20boostのtype_traitsにconstを外した型を返せる
remove_cってのがある。
ttp://www.kmonos.net/alang/boost/classes/type_traits.html
手法としてはtemplateの特殊化で行ってるらしい。
0622デフォルトの名無しさん
2008/10/03(金) 07:55:160623デフォルトの名無しさん
2008/10/03(金) 08:36:56もともと const 修飾された型から 非 const の型を特定するのは
難しいプログラム技術が必要だってことなわけですね・・・。
自作のiteratorを作ってたんですが、こりゃー自分には無理かな。・_・
0624デフォルトの名無しさん
2008/10/03(金) 08:59:29いや、試してないけど実装はたったこれだけで良いっぽいよ。
// remove_const : const修飾の除去
//非constが渡されたらこれが実体化
template <typename Type>
struct remove_const {
typedef Type type;
};
//constの場合はこちらが実体化
template <typename Type>
struct remove_const<Type const> {
typedef Type type;
};
//用例
remove_const<const int>::type i; //constが外れる
0625デフォルトの名無しさん
2008/10/03(金) 11:00:15未定義動作じゃなくて不定動作だろ。
a++と++aの評価順が決まってない。
0626デフォルトの名無しさん
2008/10/03(金) 11:08:18副作用完了点について理解しとかないと泣きを見るよ。
0627デフォルトの名無しさん
2008/10/03(金) 11:48:350628デフォルトの名無しさん
2008/10/03(金) 11:51:43↓にはそういったコードは未定義だと書いてあるが・・・
http://www.kouno.jp/home/c_faq/c3.html#2
0629デフォルトの名無しさん
2008/10/03(金) 11:59:34に改められたね。
0630デフォルトの名無しさん
2008/10/03(金) 13:17:57おぉ!すごい!できました!革命的!
が、これは安全なんでしょうか。^^;
VC++2008では
allocator::allocate, allocator::construct は const オブジェクトを引数に取れますが
allocator::deallocate. allocator::destroy は const オブジェクトを引数に取れません。
つまり、例えば const string 型のオブジェクトのためのメモリ領域は確保できますが、
その領域を開放する術はありません。そこで、
// T は const string 型とする。
// T* p;
// allocator< T > alloc;
typedef typename remove_const< T >::type * not_constT; // T 型からコンストはずし
alloc.destroy( const_cast< not_constT >( p ) ); // p からコンストはずし
のようなコードを書いたわけですが、これが正常なのかどうか…。
コンパイルは通っており、テストもパスしていますが、メモリの中身を覗く術がわからないので
もしかしたらメモリリークでもしてるのでは、と。
0631デフォルトの名無しさん
2008/10/03(金) 14:29:18プロセスとスレッドの違いが良くわかりませぬ。
スレッドってなんだ?
0632デフォルトの名無しさん
2008/10/03(金) 14:42:34それはスレッド
0633デフォルトの名無しさん
2008/10/03(金) 14:44:55それだけは言って欲しくなかった…
0634デフォルトの名無しさん
2008/10/03(金) 14:54:21スレッド・・・全部のスレッドでひとつのメモリ空間を共有
メモリ空間を共有するので複数のスレッドからひとつの変数を
同時に書き換えたりとかわけわからんことにならぬよう注意せよ
セマフォとかは普通にプロセス間でも使えるんじゃ?
0635デフォルトの名無しさん
2008/10/03(金) 15:15:19ありがとう
確かに共有メモリがどうの聞いた!
0636デフォルトの名無しさん
2008/10/03(金) 15:17:08ご愁傷様って奴だな
0637デフォルトの名無しさん
2008/10/03(金) 15:25:130638デフォルトの名無しさん
2008/10/03(金) 15:36:170639デフォルトの名無しさん
2008/10/03(金) 15:40:480640デフォルトの名無しさん
2008/10/03(金) 15:50:500641デフォルトの名無しさん
2008/10/03(金) 16:06:45確かに既に炎上してるらしいが
0642デフォルトの名無しさん
2008/10/03(金) 16:16:21ご愁傷様という他ないな
0643デフォルトの名無しさん
2008/10/03(金) 16:16:350644デフォルトの名無しさん
2008/10/03(金) 17:19:33だって、どうせ出来上がらないんだから!
0645デフォルトの名無しさん
2008/10/03(金) 17:22:18というのを宣言します。
char *hoge2;
hoge2 = hoge[3]; という代入をしたいんですが、コンパイルが通りません。hogeのほうにconstをつけなければいけるんですが・・・
教えてください
0646デフォルトの名無しさん
2008/10/03(金) 17:26:08そういうのを通さないためのconstです。
明示なcastをしてください。
0647デフォルトの名無しさん
2008/10/03(金) 17:28:11エラーになった原因とかコードとかでてるだろ?
それを調べてみればここで聞くまでもなく答えはすぐわかるよ。
0648デフォルトの名無しさん
2008/10/03(金) 17:28:42hoge2 =(char)hoge[3];ですか?
0649デフォルトの名無しさん
2008/10/03(金) 17:29:530650デフォルトの名無しさん
2008/10/03(金) 17:31:25constのポインタをconstでないポインタに代入しようとしてるから。
0651デフォルトの名無しさん
2008/10/03(金) 17:32:210652デフォルトの名無しさん
2008/10/03(金) 17:35:24hoge2はconstだと困るんです
0653デフォルトの名無しさん
2008/10/03(金) 17:38:02でstrcpy
0654デフォルトの名無しさん
2008/10/03(金) 17:42:35なんで困るのか言ってみようか
0655デフォルトの名無しさん
2008/10/03(金) 17:42:480656デフォルトの名無しさん
2008/10/03(金) 17:43:37それだといけました
>>653
それもありなんですね
>>654
いろいろ書き換えたいんです
0657デフォルトの名無しさん
2008/10/03(金) 17:50:41必ずstrcpyでコピーしる
0658デフォルトの名無しさん
2008/10/03(金) 17:53:18char *hoge[5]={"test","test2","test3","test4","test5"};
イメージ的にはどんな感じですか
hoge[0] 文字列testへのポインタ
hoge[1] 文字列test2へのポインタって感じですか?
0659デフォルトの名無しさん
2008/10/03(金) 18:24:190660デフォルトの名無しさん
2008/10/03(金) 19:13:21B宣言部の「class B:public A」の部分に「型名が必要」とエラーが出ます。(当方Borland C++)
a.hをインクルードしても「Aの宣言が複数見つかった」と言われたりで、どうしたらいいんでしょうか。
0661デフォルトの名無しさん
2008/10/03(金) 19:15:04class B の定義より前に class A の宣言だけしてみるとか
class A;
0663デフォルトの名無しさん
2008/10/03(金) 19:26:27他クラスのメンバ変数にアクセスするにあたって
privateなメンバにgetterを使ってアクセスするのと
publicなメンバを直接参照するのではどちらが速いですか?
CHoge hoge;
int a = hoge.m_publicHoge;
int b = hoge.getHoge();
// CHogeの実装
// const int& getHoge(){ return m_hoge; };
// public: :
// int m_publicHoge;
// private :
// int m_hoge;
0664デフォルトの名無しさん
2008/10/03(金) 19:30:51速度は直接アクセス
安全性はゲッター
だろう一般的に
最適化で速度差無い事もあるけど
普通はゲッター使いなさいと教わるはず
0665デフォルトの名無しさん
2008/10/03(金) 19:30:52それだけだとうまくいくはずなのでもうエスパーさんしか
アドバイスできないんじゃないかと
エラーの出る最小のコードをどうぞ
0666デフォルトの名無しさん
2008/10/03(金) 19:32:06私はマルチスレッドプログラムも何もしていないのに、コンパイラが自動でマルチコアに最適化してくれたということでしょうか?
0667デフォルトの名無しさん
2008/10/03(金) 19:35:110668デフォルトの名無しさん
2008/10/03(金) 19:42:44インクルードガードでぐぐれ
0669デフォルトの名無しさん
2008/10/03(金) 19:52:56こんな感じです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7751.zip
0670デフォルトの名無しさん
2008/10/03(金) 19:54:33#include "ca.cpp"
#include "cb.cpp"
これは。。
ヘッダをインクルードするようにして、多重インクルードガードすればいいと思うよ。
0671デフォルトの名無しさん
2008/10/03(金) 19:55:40それぞれのcppからobj作って、それらをリンクして、exeを作るのが普通。
0672デフォルトの名無しさん
2008/10/03(金) 19:57:11makefileみたらそうなってるから >>670 だけでいいんじゃないかな
0673デフォルトの名無しさん
2008/10/03(金) 20:22:08つまり、main.cppでa.hとb.hをインクルードして、
a.cppとb.cppではインクルードガードをかけるだけて、単にメンバ関数を書くだけでいいという事ですか?
0674663
2008/10/03(金) 20:37:11サンクスです。
やはり直接アクセスの方が速いですか。。。
参照返ししてるからほぼ同等だと思ったのですが甘かったようですね。
getter使うにしてもローカルで複数回使う場合
func1( hoge.getHoge(; );
func2( hoge.getHoge() );
func3( hoge.getHoge() );
とするより
int& b = hoge.getHoge();
func1(b);
func2(b);
func3(b);
のようにした方がオーバーヘッドは減りますよね?
0675デフォルトの名無しさん
2008/10/03(金) 20:42:290676デフォルトの名無しさん
2008/10/03(金) 20:43:35get/setは*.hにインラインで記述するのが基本。
気になるならアセンブリリストを出力したり、実際に測定するといいよ。
0677デフォルトの名無しさん
2008/10/03(金) 21:05:57intなら参照使わない方が早いんじゃね?
どういう用途か知らないけど
なんにせよ実測するのが一番だな
0678デフォルトの名無しさん
2008/10/03(金) 21:23:04値をレジスタに置けるなら、メンバの内容をローカル変数にコピーして、
一通り操作が終わったら、メンバに書き戻す方が良いかも。
メンバへの変更 ( 副作用 ) が発生するポイントが、書き戻し部分に限定
される点もメリット。
0679673
2008/10/03(金) 21:50:44どれから読み込んでもいい様、使う関数のあるヘッダはインクルードガード付けた上で
形式上でもインクルードしておけ、って事ですね(多分)。
アドバイスくれた方々、ありがとうございました。
0680デフォルトの名無しさん
2008/10/03(金) 22:33:10> a.cppとb.cppではインクルードガードをかける
ヘッダ内でガードする。
多重インクルードされた結果、重複定義が発生する。
> ヘッダはインクルードガード付け
となっているから理解したのかもしれないけれど。
すっきりさせるために動かない状態が続くよりは、ぐちゃぐちゃでもなんとか動く状態の
ほうがいいので、動く状態をキープしたまますっきりさせられるように努力するといいですよ。
リファクタリングって言葉も調べてみてください。
0681デフォルトの名無しさん
2008/10/03(金) 23:09:430682デフォルトの名無しさん
2008/10/03(金) 23:31:170683デフォルトの名無しさん
2008/10/04(土) 01:04:14気分
0684デフォルトの名無しさん
2008/10/04(土) 01:22:24そういう作りはWin16時代の遺物なので今となっては意味がない
Win16ではアプリケーションの最初のインスタンスだけが実行すべき処理を
InitApplication()に記述して、
WinMain()の引数hPrevInstanceがNULLの場合にのみInitApplication()を実行していた。
0685デフォルトの名無しさん
2008/10/05(日) 03:23:330686デフォルトの名無しさん
2008/10/05(日) 03:48:440687デフォルトの名無しさん
2008/10/05(日) 05:04:11どこがだめなんだろうか?
int OCTAVE_iFFT( double *OCT_POW, int DATASIZE, double *OCT_BUF)
{
ComplexMatrix originalData( DATASIZE/2, 1, 0.0 ) ;
for( int ii=0; ii<DATASIZE/2; ii++ ){
originalData( ii, 0 ).real() = OCT_POW[ii] ;
}
ComplexMatrix ifourierData = originalData.ifourier() ;
for( int ii=0; ii<DATASIZE; ii++ )
OCT_BUF[ii] = ifourierData( ii, 0 ).real() ;
return 0 ;
}
0688デフォルトの名無しさん
2008/10/05(日) 13:39:030689デフォルトの名無しさん
2008/10/05(日) 15:59:48どのくらいの規模のソースから必用になってきますか?
なんだか個人レベルでは必用がないように思えるのですが
此処の人たちが、継承を使い始めたソースの行数とかを、
個人的偏見でいいので教えてもらえると、嬉しいです
0690デフォルトの名無しさん
2008/10/05(日) 16:18:02特に多態は、規模がどんなに小さくても、それを使うことで綺麗に実現できる事をするなら
使われるのでは。
0691デフォルトの名無しさん
2008/10/05(日) 16:57:49根底から仕様変えたくなった時に不便では無いですか?
0692デフォルトの名無しさん
2008/10/05(日) 16:59:58根底から仕様変える必要に迫られるようでは基本設計の段階で間違っている
としか言いようがない
0693デフォルトの名無しさん
2008/10/05(日) 17:03:34継承とか多態に対して
「根底から仕様変えたくなった時に不便ではないか」
という疑問を抱くなら、そもそも>>689で前提にしている
「個人レベルではない規模なら、継承を使うこともあるというのはわかる」
っていう認識はあり得なくない?
「大規模なプロジェクトで継承を使うと、根底から仕様を変えたくなったときに不便ではないですか?」
という疑問は持たないの?
0694デフォルトの名無しさん
2008/10/05(日) 17:04:170695デフォルトの名無しさん
2008/10/05(日) 17:09:040696デフォルトの名無しさん
2008/10/05(日) 17:09:520697デフォルトの名無しさん
2008/10/05(日) 17:39:03一人で作るのは、ほぼ趣味みたいなものだから、根底から書き直す事は
自分はかなり多いので。(むしろ毎回?
>>693
>「大規模なプロジェクトで継承を使うと、根底から仕様を変えたくなったときに不便ではないですか?」
大規模なプロジェクトっていうのは、
仕組みの部分の作り方は既に枯れてると思って、
根底から書き換える事はほとんど無いと予想したんですが。
本職じゃないからこの辺りの事情はわからないっす。
0698デフォルトの名無しさん
2008/10/05(日) 17:44:42だったらOOPなんか使うな。
お前には向いてない。
0699デフォルトの名無しさん
2008/10/05(日) 17:47:42くらい根底から変わるなら、確かに設計をいくらしっかりやってもしょうがないが・・・。
0700デフォルトの名無しさん
2008/10/05(日) 18:14:240701デフォルトの名無しさん
2008/10/05(日) 18:18:25そういう問題かよ
0702デフォルトの名無しさん
2008/10/05(日) 19:34:46それに近いかもしれないww
作ろうと思うものがバラバラで困った
同じものを何度も何度も作るなら継承なのかなぁ
初めて作るものはどうやってもまともに設計なんてできやしない
0703デフォルトの名無しさん
2008/10/05(日) 19:36:09じゃぁC++初心者はどこからOOP入れば・・・
0704デフォルトの名無しさん
2008/10/05(日) 19:39:42一見遠回りのようでも
0705デフォルトの名無しさん
2008/10/05(日) 20:28:340706デフォルトの名無しさん
2008/10/05(日) 21:09:27Qtお勧め
モノ作るためだけにもいいツールだけど、
C++(OOP)を理解する教材としても結構いいと思うよ
英語ダメ、とか泣き言言わない人なら
0707デフォルトの名無しさん
2008/10/05(日) 21:21:04最後の一行orz
>>704
多分、そこまで初心者でもないです
perlなら使える
>>705
そうですよぬー。
がんばってみます。
0708デフォルトの名無しさん
2008/10/05(日) 21:57:20特定のジャンルの英文なんて、
出てくる単語なんて少ないし、
万国共通の言語(プログラミング言語)が添えてある
足を踏み入れてみたら、
なんだ、ただの食わず嫌いだったんだなということがわかる
0709デフォルトの名無しさん
2008/10/05(日) 22:46:020710デフォルトの名無しさん
2008/10/06(月) 11:42:09そこんところ間違えちゃだめだ。
まあ、変数名つけるときに辞書引いたりはするけど。
0711デフォルトの名無しさん
2008/10/06(月) 15:54:54自分はDirectXのコードばかりなんでMFCや.NETとかは勉強せずに
Win32APIでしかWindowsアプリ作ったことないんですが、
QtはMFCやWin32APIで書くよりも楽しい&効率的でしょうか?
wxWindowsとか他にもあるみたいですが、
それらと比べるとどうなのでしょうか。使った方の感想でいいので
よかったら教えてください。
0712デフォルトの名無しさん
2008/10/06(月) 16:04:30いや、皆がしてるのは、英語で書かれたコメントやマニュアルを読む話では。
0713デフォルトの名無しさん
2008/10/06(月) 16:17:30QtはMFCより遥かに楽で美しい
ただ組み立ててるだけのサンプルコードなのに
FireFoxもどきのブラウザまで作れてしまう
ただWindowsしか使わないなら他に選択肢はある
無料版はDirectXサポート外だし、
ソース公開の義務が発生するしな
0714デフォルトの名無しさん
2008/10/06(月) 16:50:44ちなみにGtkはC言語ベースだけあって
オブジェクト指向になれてしまった人には苦痛に感じる汚さだと思う
C++ラッパーはあるけどね
あと、2byte文字が苦手だったのかな?
どこかでマルチプラットフォームという面ではまだあと一歩だった気がする
wxWindowはできが良さそうに見えて
まだまだ発展途上って感じで今後に期待、のまま月日が流れてる・・・
Qtはこの3つの中で最も後発だから、
設計面でもマルチプラットフォームの達成度も一番できがいいけど
やっぱソース公開の義務が足を引っ張ってる感じだな
マニュアルやサンプルはかなり充実してるのに
突っ込み、ご指摘ヨロ
0715デフォルトの名無しさん
2008/10/06(月) 17:00:250716デフォルトの名無しさん
2008/10/06(月) 17:11:21中古車が買えちゃうぐらいだぞ?w
0717711
2008/10/06(月) 17:17:44ありがとうございます。かなり興味湧いてきました。
他のプラットフォームでも同じコードでそのまま動くというのもすごいですね。
自分が使うツール組む分には非常によさげですね。
>>715
値段見てちびりそうになりました(´・ω・`)
0718デフォルトの名無しさん
2008/10/06(月) 23:25:27extern "C" void hogehoge()
{
}
こういう風に定義部分にextern "C"を付けて
C++でコンパイルしたらマングリングされなかったが、
ググっても定義部分に付けてるとこ見た事ない。
これってコンパイラ依存な実装?
というか、マングリングってちょっとエロいな
0719デフォルトの名無しさん
2008/10/06(月) 23:26:190720デフォルトの名無しさん
2008/10/07(火) 00:06:290721デフォルトの名無しさん
2008/10/07(火) 00:09:14たしかコンパイラ依存じゃないっけ?
VCとBCBでもマングリング後?の実際の関数名は違ってるはずだし。
だがうろ覚えなので間違ってても責任は持たん。
0722デフォルトの名無しさん
2008/10/07(火) 01:10:59関数の宣言なしに定義を書いたら、それは宣言も兼ねるというやつだ。
staticな関数も、宣言なしにいきなり定義を書けるだろ?
0723デフォルトの名無しさん
2008/10/07(火) 01:23:33んじゃ、
extern "C" void hogehoge();
void hogehoge()
{
}
ってやってもマングリングされないの?
今試せる環境ないからわかんないけど
つまり、俺はextern "C"ってマングリングされてない関数を
呼び出す時の為にあると思ってたけど、
マングリングさせないという意味もあるということだな?
0724デフォルトの名無しさん
2008/10/07(火) 01:30:220725デフォルトの名無しさん
2008/10/07(火) 01:33:36なるほど。そういう解釈なんだね.
じゃあ、723で書いたコードは多分マングリングされちゃうね。
ありがとう^^
0726デフォルトの名無しさん
2008/10/07(火) 03:23:08一旦 extern "C" で宣言されていれば、同じ名前の定義もリンケージ指定を引き継ぐよ。
723 の hogehoge() は C で使える。
0727デフォルトの名無しさん
2008/10/07(火) 13:46:040728727
2008/10/07(火) 13:50:42ヘッダファイルを生成して、その中のクラスのコンストラクタで動的にDLLを
呼び出しておきたいのですが。
DLLを渡したら自動でヘッダファイルを生成したいんです。
やり方教えてください。
0729デフォルトの名無しさん
2008/10/07(火) 13:55:41ヘッダファイルは共用できるように書けます
共用したほうがいいです
引数のトータルバイト数くらいなら頑張れば分かりますが
DLLから引数の個数を自動で調べる方法はありません
0730デフォルトの名無しさん
2008/10/07(火) 14:02:00そうですか。残念ですがあきらめます。
0731デフォルトの名無しさん
2008/10/07(火) 14:06:50ライブラリの説明書見ながら、動的呼び出しのC++用のヘッダを作っているのですが。
DLLに、いつも静的リンクと動的リンクの二つヘッダを入れてほしいです。
0732デフォルトの名無しさん
2008/10/07(火) 14:07:31implib.exe とか dlltool.exe とかでライブラリを作ることは可能
0733デフォルトの名無しさん
2008/10/07(火) 14:08:250734デフォルトの名無しさん
2008/10/07(火) 14:19:11このヘッダを読むだけでDLLの関数がどのコンパイラでも使えます。
friend関数の中身は省略してます。
class SevenZipDLL {
HINSTANCE hd;
typedef int (WINAPI *FN0)(const HWND, LPCSTR, LPSTR, const DWORD);
typedef BOOL (WINAPI *FN1)(LPCSTR, const int );
FN0 SevenZip_;
FN1 SevenZipCheckArchive_;
public:
friend int SevenZip(string s, string &t);
friend BOOL SevenZipCheckArchive(string);
SevenZipDLL(){
hd = LoadLibrary("7-zip32.dll");
SevenZip_ = (FN0) GetProcAddress(hd,"SevenZip");
SevenZipCheckArchive_ = (FN1) GetProcAddress(hd,"SevenZipCheckArchive");
}
} SevenZipDLL_;
0735デフォルトの名無しさん
2008/10/07(火) 17:29:31それと、静的リンク前提のヘッダでも、0xならもう少し活用できると思う。
g++ -std=c++0xでこんなコードが書ける。
#include <windows.h>
int main()
{
typedef decltype(MessageBoxA)* PFNMsgBoxA;
if (HMODULE hmodUser = LoadLibrary(TEXT("user32")))
{
if (PFNMsgBoxA pMsgBox = reinterpret_cast<PFNMsgBoxA>(GetProcAddress(hmodUser, "MessageBoxA")))
{
pMsgBox(0, "Hello world", "", 0);
}
FreeLibrary(hmodUser);
}
}
0736デフォルトの名無しさん
2008/10/07(火) 18:12:400737デフォルトの名無しさん
2008/10/07(火) 18:16:270738デフォルトの名無しさん
2008/10/08(水) 01:23:260739デフォルトの名無しさん
2008/10/08(水) 06:22:41if(++hoge == HogeFunc());
このif文はキチンと保証されてましたっけ?
0740デフォルトの名無しさん
2008/10/08(水) 07:17:530741デフォルトの名無しさん
2008/10/08(水) 08:22:05C99やC++じゃなければ、そのhogeの定義がブロックの先頭である必要がある。
HogeFunc()は整数型か、それに暗黙的に変換できる型である必要がある。
0742デフォルトの名無しさん
2008/10/08(水) 09:30:34hogeがHogeFunc()の中で変更されてなければ保証されている。
0743デフォルトの名無しさん
2008/10/08(水) 10:43:160744デフォルトの名無しさん
2008/10/08(水) 10:48:480745743
2008/10/08(水) 10:57:350746デフォルトの名無しさん
2008/10/08(水) 11:40:350747デフォルトの名無しさん
2008/10/08(水) 12:35:410748デフォルトの名無しさん
2008/10/08(水) 12:44:40==は評価順位決まってるだろ。
0749デフォルトの名無しさん
2008/10/08(水) 12:58:460750デフォルトの名無しさん
2008/10/08(水) 13:57:210751デフォルトの名無しさん
2008/10/08(水) 14:06:430752デフォルトの名無しさん
2008/10/08(水) 15:53:100753デフォルトの名無しさん
2008/10/08(水) 16:52:45C++はわかんね。EffectiveC++とか?辞典的じゃないけど。
0754デフォルトの名無しさん
2008/10/08(水) 17:33:06携帯なんでググってくれ
古いけど、最初は結構お世話になった
重複機能(各コンテナのpush_backとか)端折ってない上、
そこそこサンプルコードが載ってるため分厚い
比率はC:C++=6:4ぐらいで<algorithm>まで入ってる
まぁこれしか知らないんだがw
0755デフォルトの名無しさん
2008/10/08(水) 17:59:10C++は、禿のより、Nicolai Josuttisの本の方が分かりやすかった。
アスキー出版から邦訳もあったはずだけど、絶版だった気もする。
まあ原書読め。
0756デフォルトの名無しさん
2008/10/08(水) 18:14:29流れ読めない人だねえ。もうちょっと落ち着いてレスしようぜ。
0757デフォルトの名無しさん
2008/10/08(水) 21:39:04ありがとう、購入の際の参考にします
しかし近くに大きな本屋がないような田舎だと専門書買うのって苦労するなぁ('A`)
0758デフォルトの名無しさん
2008/10/08(水) 23:01:52ttp://www005.upp.so-net.ne.jp/episteme/html/stlprog/
書籍で辞典代わりに唯一買ったのは、これくらいか。
「C++標準ライブラリの使い方 完全ガイド」 柏原 正三 技術評論社
0759デフォルトの名無しさん
2008/10/09(木) 03:21:19nの値が3を超えるまで待機したりとか。同期オブジェクトしかないですか
0760デフォルトの名無しさん
2008/10/09(木) 04:30:26メモリマップドファイルに切り替えて、不安定にならないようにしたり出来ると良いです。
0761デフォルトの名無しさん
2008/10/09(木) 04:31:300762デフォルトの名無しさん
2008/10/09(木) 04:45:490763デフォルトの名無しさん
2008/10/09(木) 05:00:160764デフォルトの名無しさん
2008/10/09(木) 05:09:09基本的な解決策って何でしょうか?
よろしくお願いします。
0765デフォルトの名無しさん
2008/10/09(木) 05:29:38ファイルにかかれた
abc:defという文字列ををabcとdefに切り分けるプログラムを考えています。
while((c = fgetc(f)) != EOF){
if(c == ':'){
ungetc(c,f);
fseek(f,1,SEEK_CUR);
}
printf("%c\n",c);
}
とやったのですが、abc:defと表示されてしまいます。
fseekには成功した場合ungetcで戻したデータはなかったことになると
manに書いてありました。
abc:まで読む
:戻す
fseek成功。:なかったことになる。
dから読み始める
っていうのを想像していたのですが、:が入ってしまいます。
このような場合どのようにするのが定石なのでしょうか?
0766デフォルトの名無しさん
2008/10/09(木) 05:51:550767デフォルトの名無しさん
2008/10/09(木) 05:55:29http://www9.plala.or.jp/sgwr-t/lib/strtok.html
0768デフォルトの名無しさん
2008/10/09(木) 06:00:43http://always-pg.com/c/runtime_rd/string/strtok.html
0769デフォルトの名無しさん
2008/10/09(木) 07:03:39dlmalloc
ptmalloc
STLport
jemalloc
Google malloc
0770デフォルトの名無しさん
2008/10/09(木) 07:52:55なので、残っているのは、Google mallocとSTLport、jemallocの比較です。
http://goog-perftools.sourceforge.net/doc/tcmalloc.html
0771デフォルトの名無しさん
2008/10/09(木) 08:21:14標準のメモリ管理を乗っ取りたいのですがどうすればいいですか?
jemalloc
http://mxr.mozilla.org/mozilla-central/source/memory/jemalloc/
Google malloc
http://code.google.com/p/google-perftools/
0772デフォルトの名無しさん
2008/10/09(木) 09:36:190773デフォルトの名無しさん
2008/10/09(木) 09:39:26ptmallocとjemallocは、UNIX用に作られていてコンパイルできそうにありませんでした。
Google mallocとdlmallocは、変更無しにコンパイルは出来ました。
使い方はわかりません。
0774デフォルトの名無しさん
2008/10/09(木) 09:59:37Google mallocとSTL portとboost poolくらいですね。
使い方わかったらレポします。 あと知っているいたら教えてください。
0775デフォルトの名無しさん
2008/10/09(木) 10:20:30#include <iostream>
#include <boost/timer.hpp>
#include <boost/pool/pool.hpp>
using namespace std;
#define N 1024*1024
int main()
{
int n, **a=new int *[N];
double cl,cr;
boost::timer timer;
timer.restart();
for(n = 0; n < N ; n++)a[n]=new int;
cr=timer.elapsed();
for(n = 0; n < N ; n++)delete a[n];
timer.restart();
boost::pool<> pool(sizeof(int));
for(n = 0; n < N; n++) pool.malloc();
cl=timer.elapsed();
cout <<"boolの確保速度 "<<cl<<"秒 newの確保速度 "<<cr<<"秒 速度比 "<<cr/cl<< "\n";
}
0776デフォルトの名無しさん
2008/10/09(木) 10:24:10#include <iostream>
#include <boost/timer.hpp>
#include <boost/pool/pool.hpp>
using namespace std;
#define N 10*1024*1024
int main()
{
int n, **a=new int *[N];
double cl,cr;
boost::timer timer;
timer.restart();
for(n = 0; n < N ; n++)a[n]=new int;
cr=timer.elapsed();
for(n = 0; n < N ; n++)delete a[n];
timer.restart();
boost::pool<> pool(sizeof(int));
for(n = 0; n < N; n++) a[n] = (int *)pool.malloc();
cl=timer.elapsed();
cout <<"boolの確保速度 "<<cl<<"秒 newの確保速度 "<<cr<<"秒 速度比 "<<cr/cl<< "\n";
}
0777デフォルトの名無しさん
2008/10/09(木) 11:42:300778デフォルトの名無しさん
2008/10/09(木) 14:05:54たとえば5Gのスパースファイルを作って中身が入っていたとすると、これを読むのは
実5Gのファイルと比べて速かったりしますか?
http://shoppers-jp.com/tech/sdk022.html
0779デフォルトの名無しさん
2008/10/09(木) 14:12:470780デフォルトの名無しさん
2008/10/09(木) 14:15:42ちゃんと読み書きできますよ。だから全部が0とは限りません。 途中や末尾にデータ入れられます。
0781デフォルトの名無しさん
2008/10/09(木) 14:36:500782デフォルトの名無しさん
2008/10/09(木) 14:58:14結局5GB分のデータが入る予定なら変わらないんじゃないか
大部分0のままにしておくことに意味があるのならいいかもしれないけれど
速度は実際に測ってみれよ
0783デフォルトの名無しさん
2008/10/09(木) 15:19:30元のクラスが持ってるデータを変換して次のプロセスを担当するクラスへと引き渡すとき
元クラス-変換クラス-次クラスのように数珠繋ぎに各クラスのポインタを持たせるか
元クラスに変換クラスと次クラスへのポインタを一括して持たせしまうか
どちらがよいでしょうか?
0784デフォルトの名無しさん
2008/10/09(木) 15:23:33それぞれの演算用クラスにぶち込む
0785デフォルトの名無しさん
2008/10/09(木) 15:36:28#include <windows.h>
#include <iostream>
using namespace std;
#define filesize 100*1024*1024
int main() {
DWORD retsz; int n,m,cl,sum=0;
HANDLE fp = CreateFile("SPARSEFILE", GENERIC_WRITE|GENERIC_READ,0, NULL, CREATE_ALWAYS, 0, NULL);
DeviceIoControl(fp, FSCTL_SET_SPARSE, NULL,0, NULL, 0, &retsz, NULL);
SetFilePointer(fp,filesize, NULL, FILE_BEGIN); SetEndOfFile(fp);
HANDLE hd = CreateFileMapping(fp, NULL, PAGE_READWRITE,0,0, "SPARSETEST");
char *p = (char*)MapViewOfFile(hd, FILE_MAP_ALL_ACCESS, 0, 0, 0);
HANDLE fq = CreateFile("REALFILE", GENERIC_WRITE|GENERIC_READ,0, NULL, CREATE_ALWAYS, 0, NULL);
SetFilePointer(fq,filesize, NULL, FILE_BEGIN); SetEndOfFile(fq);
HANDLE he = CreateFileMapping(fq, NULL, PAGE_READWRITE,0,0, "REALTEST");
char *q = (char*)MapViewOfFile(he, FILE_MAP_ALL_ACCESS, 0, 0, 0);
0786デフォルトの名無しさん
2008/10/09(木) 15:37:18for(n=0;n<5000;n++){m=rand()%filesize; p[m]=q[m]='a';}
FlushViewOfFile(p,0);FlushViewOfFile(q,0);
cl=GetTickCount(); for(n=0;n<filesize;n++)sum+=p[n]; cl=GetTickCount()-cl; cout<<"SPARSEFILEの読み込み速度 = "<<cl<<endl;
cl=GetTickCount(); for(n=0;n<filesize;n++)sum+=q[n]; cl=GetTickCount()-cl; cout<<" REALFILEの読み込み速度 = "<<cl<<endl;
cout<<"\n密なデータ書き込み中・・・\n";
for(n=0;n<filesize/2;n+=2){ p[2*n]=q[2*n]='a'; p[2*n+1]=q[2*n+1]='\n'; }
FlushViewOfFile(p,0);FlushViewOfFile(q,0);
cl=GetTickCount(); for(n=0;n<filesize;n++)sum+=p[n]; cl=GetTickCount()-cl; cout<<"SPARSEFILEの読み込み速度 = "<<cl<<endl;
cl=GetTickCount(); for(n=0;n<filesize;n++)sum+=q[n]; cl=GetTickCount()-cl; cout<<" REALFILEの読み込み速度 = "<<cl<<endl;
cout<<"\n終了処理中・・・\n";
FlushViewOfFile(p,0);UnmapViewOfFile(p); CloseHandle(hd); CloseHandle(fp);
FlushViewOfFile(q,0);UnmapViewOfFile(q); CloseHandle(he); CloseHandle(fq);
cout<<"最適化対策のための計 sum = "<<sum<<endl; return 0;}
0787デフォルトの名無しさん
2008/10/09(木) 15:50:31データ用クラスを作ってそれをそれぞれに共有させるという事ですか?
0788デフォルトの名無しさん
2008/10/09(木) 16:01:550789デフォルトの名無しさん
2008/10/09(木) 16:05:40http://www.google.co.jp/search?q=google+malloc
0790デフォルトの名無しさん
2008/10/09(木) 16:18:30多態性を、と思ったが、
アマ意見だからこの意見の評価はオレも聞きたい(´・ω・`)
頼りない意見でスマン
↓エロい人
0791デフォルトの名無しさん
2008/10/09(木) 18:18:04こういった関数が書いてありますが、
bcc2009の標準にするにはどういった設定をおこなえばいいでしょうか?
extern "C" void cfree
extern "C" int posix_memalign
extern "C" void* memalign
extern "C" void* valloc
extern "C" void* pvalloc
0792デフォルトの名無しさん
2008/10/09(木) 19:15:21標準にしたいってなんだろ。
そういった関数が書かれているならそういった関数を使えばいいじゃない
0793デフォルトの名無しさん
2008/10/09(木) 19:20:230794デフォルトの名無しさん
2008/10/09(木) 19:20:44チラシの裏でやれ。
0795デフォルトの名無しさん
2008/10/09(木) 19:22:07だったらnew演算子をオーバーロードしたりカスタムアロケーターを作ればいいだろうが。
0796765
2008/10/09(木) 20:52:32>>767
>>768
ありがとうございます。
このような関数があるとは知りませんでした。
勉強になりました。
じつは、自分はパーサーを作りたいのでungetcを使えた方が良いのです。
abc:defの場合、
abc:でungetcして、'¥0'を入れてreturnするみたいな...
ungetcを使う場合はどのような方法があるでしょうか?
たとえば:の出てきたところを記録していて、
fseekで記録+1の所から、読み始めるとか...
0797デフォルトの名無しさん
2008/10/09(木) 20:55:36printf を else{ .. } で囲むといいと思うよ
0798デフォルトの名無しさん
2008/10/09(木) 23:51:54正しく使えばトラブル起きないけど、
危険な関数って意味で
0799デフォルトの名無しさん
2008/10/10(金) 00:15:04#include <iomanip>
#include <iostream>
#include <cmath>
int main()
{
std::cout << std::scientific << std::setprecision(8) << M_PI << std::endl;
return 0;
}
このプログラムを実行すると、
3.14159265e+00
と出力されるんですが、フォートランみたいに、
0.31415926e+01
というように、0の位を0で出力する方法はあるでしょうか?
0800デフォルトの名無しさん
2008/10/10(金) 11:14:19784に賛成
元クラスと次クラスとの依存関係を作らなくてすむから。
0801デフォルトの名無しさん
2008/10/10(金) 12:51:58たとえば、このようなクラス、変数名があったとき、これをポインタで定義できますか?
class ABCD { } ABCD_;
0802デフォルトの名無しさん
2008/10/10(金) 12:56:39class ch { } ch_;
こんなのは出来ないしやり方ありますか
0803デフォルトの名無しさん
2008/10/10(金) 13:01:45具体的な使用例があれば何かアドバイスできるかもしれない
0804デフォルトの名無しさん
2008/10/10(金) 13:05:250805デフォルトの名無しさん
2008/10/10(金) 13:06:150806デフォルトの名無しさん
2008/10/10(金) 13:16:100807デフォルトの名無しさん
2008/10/10(金) 13:16:560808デフォルトの名無しさん
2008/10/10(金) 13:19:430809デフォルトの名無しさん
2008/10/10(金) 13:22:19いいえ
operator new の呼び出しとコンストラクタの呼び出しは別個です
0810デフォルトの名無しさん
2008/10/10(金) 13:25:400811デフォルトの名無しさん
2008/10/10(金) 13:26:51「引数のように扱う」の意味がわからん。
何かができるかどうかって話なら、まず試せばいいんじゃないの?
0812デフォルトの名無しさん
2008/10/10(金) 13:27:54こうですか?わかりません
template <void(*func)()> class foo {};
void bar(){}
foo<bar> baz;
0813デフォルトの名無しさん
2008/10/10(金) 13:28:21わかりました。ありがとうごいます。
0814デフォルトの名無しさん
2008/10/10(金) 13:28:53テンプレートパラメータに指定できるもの - Faith and Brave - C++で遊ぼう
関数ポインタも指定できる(サンプルは書かないがメンバ関数ポインタもできる)
http://d.hatena.ne.jp/faith_and_brave/20080527/1211878612
0815デフォルトの名無しさん
2008/10/10(金) 14:01:38#include <iostream>
#include <windows.h>
using namespace std;
typedef int (WINAPI *FN0)(HANDLE, LPCSTR, LPSTR, const DWORD);
typedef BOOL (WINAPI *FN1)(const BOOL);
char dn[3][20]={"aaa.dll","bbb.dll","ccc.dll"};
char en[3][2][20]={"aaa1","aaa2","bbb1","bbb2","ccc1","ccc2"};
void fnc(int n){
// hd = LoadLibrary(dn[n]);
// z1 = (FN0) GetProcAddress(hd,en[n][0]);
// z2 = (FN1) GetProcAddress(hd,en[n][1]);
}
class aaa { HINSTANCE hd;
public: FN0 z1; FN1 z2;
aaa(){ fnc(0); } } aaa_;
class bbb { HINSTANCE hd;
public: FN0 z1; FN1 z2;
bbb(){ fnc(1); } } bbb_;
class ccc { HINSTANCE hd;
public: FN0 z1; FN1 z2;
ccc(){ fnc(2); } } ccc_;
main(){}
0816デフォルトの名無しさん
2008/10/10(金) 14:03:170817デフォルトの名無しさん
2008/10/10(金) 14:16:580818デフォルトの名無しさん
2008/10/10(金) 14:31:210819デフォルトの名無しさん
2008/10/10(金) 14:32:350820デフォルトの名無しさん
2008/10/10(金) 14:33:30fnc("aaa"); (もしくはクラスを特定できるポインタを与える) ことでfnc側で、
HINSTANCE hd, FN0 z0, FN1 z1を特定させることは出来ないですか?
#include <windows.h>
typedef int (WINAPI *FN0)(HANDLE, LPCSTR, LPSTR, const DWORD);
typedef BOOL (WINAPI *FN1)(const BOOL);
char en[3][3][20]={
{"aaa.dll","aaa1","aaa2"},
{"bbb.dll","bbb1","bbb2"},
{"ccc.dll","ccc1","ccc2"} };
void fnc(HINSTANCE &hd, FN0 &z0, FN1 &z1,int n){
hd = LoadLibrary(en[n][0]);
z0 = (FN0) GetProcAddress(hd,en[n][1]);
z1 = (FN1) GetProcAddress(hd,en[n][2]); }
class aaa { HINSTANCE hd;
public: FN0 z0; FN1 z1;
aaa(){ fnc(hd,z0,z1,0); } } aaa_;
class bbb { HINSTANCE hd;
public: FN0 z0; FN1 z1;
bbb(){ fnc(hd,z0,z1,1); } } bbb_;
class ccc { HINSTANCE hd;
public: FN0 z0; FN1 z1;
ccc(){ fnc(hd,z0,z1,2); } } ccc_;
main(){}
0821デフォルトの名無しさん
2008/10/10(金) 14:37:320822デフォルトの名無しさん
2008/10/10(金) 15:29:080823デフォルトの名無しさん
2008/10/10(金) 15:35:150824デフォルトの名無しさん
2008/10/10(金) 15:37:39ちなみに次の質問は自己解決してます。
0825デフォルトの名無しさん
2008/10/10(金) 15:41:23他の正常だったプロジェクトこコンパイルしてもエラーが出ます。
どうもwinnt.hの内容を変えてしまったようなのですが、どこがいけないのかわかりません。
再インストール以外でいい方法はありませんか?システムプログラムはロックはかかってないんでしょうか?
0826825
2008/10/10(金) 15:47:180827デフォルトの名無しさん
2008/10/10(金) 16:34:270828デフォルトの名無しさん
2008/10/10(金) 16:41:29この際、outputだけメモリを指定したいのですが、メモリをファイルのように見せかけるテクはありませんか?
関数FNCの変更は出来ません
0829デフォルトの名無しさん
2008/10/10(金) 16:54:17ドライバとか不要の方法は無いですか
0830デフォルトの名無しさん
2008/10/10(金) 17:19:17void sum(int dim[],int num)
{
int i,sum=0;
for(i=0;i<num;i++)
sum+=dim[i];}
int main(void)
{
int i,dim[]={5,1,2,3,4};
int num=5,max,total;
max=dim[0];
for(i=1;i<num;i++)
if(max<dim[i])
max=dim[i];
total=sum(dim,num);
printf("%d\n",max);
printf("%d\n",total);
return(0);
}
voidからintに変換できません、と出ます
どなたか
0831デフォルトの名無しさん
2008/10/10(金) 17:21:18{
int i,sum=0;
for(i=0;i<num;i++)
sum+=dim[i];
return sum;
}
0832デフォルトの名無しさん
2008/10/10(金) 17:22:57sum()が何も返さないのにtotal=sum()としているから
0833828
2008/10/10(金) 17:26:010834830
2008/10/10(金) 17:39:31といわれました・・・・
どういうことなの・・・
0836820
2008/10/10(金) 17:41:29この様にしました。 なるべく重複する部分を無くしたいという目的なのでこれでOKです。
#include <windows.h>
#include <string>
using namespace std;
typedef int (WINAPI *FN0)(HANDLE, LPCSTR, LPSTR, const DWORD);
typedef BOOL (WINAPI *FN1)(const BOOL);
class DLLdata { public: string tag; HINSTANCE hd; FN0 z0; FN1 z1; };
void fnc(DLLdata &x){
string y;
y=x.tag+".DLL"; x.hd = LoadLibrary(y.c_str());
y=x.tag+"0"; x.z0 = (FN0) GetProcAddress(x.hd,y.c_str());
y=x.tag+"1"; x.z1 = (FN1) GetProcAddress(x.hd,y.c_str()); }
class A_ {
DLLdata x;
public: A_(){x.tag="A"; fnc(x);}} A;
class B_ {
DLLdata x;
public: B_(){x.tag="B"; fnc(x);}} B;
class C_ {
DLLdata x;
public: C_(){x.tag="C"; fnc(x);}} C;
main(){}
0837デフォルトの名無しさん
2008/10/10(金) 17:46:51return sum; で返したつもりなのですが・・・
0838デフォルトの名無しさん
2008/10/10(金) 17:50:190839830
2008/10/10(金) 17:53:020840デフォルトの名無しさん
2008/10/10(金) 17:53:04代入することで関数の戻り値になるというのがあって
それと混同してる予感。
0841デフォルトの名無しさん
2008/10/10(金) 18:07:460842デフォルトの名無しさん
2008/10/10(金) 18:14:03メモリマップドファイルの逆です。WindowsXPです。
RAMディスクを前準備無しに動的に生成出来る方法でもいいです。
0843デフォルトの名無しさん
2008/10/10(金) 18:24:410844デフォルトの名無しさん
2008/10/10(金) 18:27:54おねがいします
0845デフォルトの名無しさん
2008/10/10(金) 18:53:09メモリに対して読み書きするストリームクラスというオチだと予想。
0846デフォルトの名無しさん
2008/10/10(金) 19:12:060847846
2008/10/10(金) 19:42:21役立たねぇな
0848デフォルトの名無しさん
2008/10/10(金) 19:51:260849デフォルトの名無しさん
2008/10/10(金) 19:56:080850846
2008/10/10(金) 19:57:26名前付きパイプとかで出来ました
0851846
2008/10/10(金) 20:06:07パイプカットとかも役に立ちました。
0852デフォルトの名無しさん
2008/10/10(金) 20:34:420853デフォルトの名無しさん
2008/10/10(金) 20:44:080854デフォルトの名無しさん
2008/10/10(金) 20:50:16だれかおねがいします
0855854
2008/10/10(金) 21:01:180856デフォルトの名無しさん
2008/10/10(金) 21:10:02了解した
0857デフォルトの名無しさん
2008/10/10(金) 21:25:530858デフォルトの名無しさん
2008/10/10(金) 21:30:180859デフォルトの名無しさん
2008/10/10(金) 22:20:370860デフォルトの名無しさん
2008/10/10(金) 23:18:130861デフォルトの名無しさん
2008/10/11(土) 01:30:34どなたか自己解決してください。
0862デフォルトの名無しさん
2008/10/11(土) 04:21:35単語一つでググったら、あっさり同じ質問と回答が出てきた
0863デフォルトの名無しさん
2008/10/11(土) 05:20:29***1と***2のところが機種、コンパイラ依存みたいなんですが
#include <stdarg.h>
#include <stdio.h>
#define print(...) print_(__VA_ARGS__,NULL) // ***1
void print_(char *p, ...){
va_list L;
va_start(L, p);
L = (char *)L - sizeof(char*); // ***2
char *ch;
while((ch=va_arg(L, char*))!=0)puts(ch);
va_end(L);}
int main(void){ print("alpha", "beta", "gamma","saigo"); }
0864デフォルトの名無しさん
2008/10/11(土) 05:29:240865デフォルトの名無しさん
2008/10/11(土) 08:31:200866デフォルトの名無しさん
2008/10/11(土) 10:36:590867デフォルトの名無しさん
2008/10/11(土) 10:38:17です。
0868デフォルトの名無しさん
2008/10/11(土) 10:42:400869デフォルトの名無しさん
2008/10/11(土) 14:03:22String^
^ ←これはなんですか?
0870デフォルトの名無しさん
2008/10/11(土) 14:04:31まぁVC独自の拡張のようなもん
0871デフォルトの名無しさん
2008/10/11(土) 14:13:34ありがとうございます。
C++/CLIとやらを勉強する必要がありそうですね。
0872デフォルトの名無しさん
2008/10/11(土) 16:27:52関数があまり分かっていないので、グチャグチャになってしまいました・・・。
アドバイス、よろしくお願いします。
0873デフォルトの名無しさん
2008/10/11(土) 16:41:22return 0 だから nx,ny,nz=scan_side(); は nz に 0 が入るだけ
書くとしたらこうか・・・
void scan_side(int *nx, int *ny, int *nz) {
.....
int nx, ny, nz;
scan_side(&nx, &ny, &nz);
scan_sideの中のwhile無限ループも気になる
shapeのreturn (max);は何?
printf("三角形",shape(nx,ny,nz)); も変
たぶんこう?
shape(nx, ny, nz);
printf("三角形");
もしくは
const char *shape(int x,int y,int z)
return "鈍角";
return "鋭角";
return "直角";
として
printf("%s三角形",shape(nx,ny,nz));
とか
0874873
2008/10/11(土) 16:42:390875デフォルトの名無しさん
2008/10/11(土) 19:54:11ありがとうございます。
0876デフォルトの名無しさん
2008/10/11(土) 22:01:350877デフォルトの名無しさん
2008/10/11(土) 22:03:190878デフォルトの名無しさん
2008/10/11(土) 22:03:240879デフォルトの名無しさん
2008/10/11(土) 22:07:55基礎を勉強したいです
これだけ知ってれば応用利くよみたいな
特にこれをやりたいってのはないんですが
0880デフォルトの名無しさん
2008/10/11(土) 22:10:17じゃあ基礎を勉強するんだ
0881デフォルトの名無しさん
2008/10/11(土) 22:11:16ピアノが出来るようになりたければ、ピアノ触らないといけないよね。
0882デフォルトの名無しさん
2008/10/11(土) 22:14:17OK
>>881
だから書けないって
0883デフォルトの名無しさん
2008/10/11(土) 22:27:270884デフォルトの名無しさん
2008/10/11(土) 22:29:23日本語わからない奴に、いきなり日本語書けって言って書けると思う?
0885デフォルトの名無しさん
2008/10/11(土) 22:32:22誰もいきなり漢字を書けとはいってない
ひらがなから勉強しろってことだ
0886デフォルトの名無しさん
2008/10/11(土) 22:45:48日本語の辞書があれば日本語かけるだろ
0887デフォルトの名無しさん
2008/10/11(土) 23:17:400888デフォルトの名無しさん
2008/10/12(日) 00:10:28書いたのですが、もっと簡潔にかけないでしょうか?
たとえば、7だったら111なので2、9だったら1001なので1、という内容です。
1が立っているビットが1つまたは0だったら出力は0でいいです。
int func(unsigned char num) {
unsigned char div = 128; // 2^7
int digit = 8;
int count = 0;
while (div > 0) {
if (num & div) {
count++;
}
if (count == 2) {
break;
}
digit--;
div /= 2;
}
return digit;
}
0889デフォルトの名無しさん
2008/10/12(日) 00:15:10googleの使い方を覚える。
0890デフォルトの名無しさん
2008/10/12(日) 00:33:32そのコードで別に問題ないと思うけど。
簡素って言うと、こんな感じがいいのか?
int func(unsigned char num)
{
int count = 0;
for (int digit = 8; digit > 0; --digit)
if ((num & (1 << (digit - 1))) && (++count == 2)) return digit;
return 0;
}
0891デフォルトの名無しさん
2008/10/12(日) 07:31:36『Abnormal program termination』というメッセージが表示されて何故かエラーになってしまいます。
Borland C++ Compiler 5.5、メモリは2045MB、CPUはCore2Duoの上位モデル、OSはVistaです
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> data;
for (vector<int>::size_type i=0; i<=4294967296; i++) { ////4byteのint型は0〜2,147,483,648-1 uint型は0〜4,294,967,296-1
data.push_back(5);
}
cout <<data[4294967296];
}
0892デフォルトの名無しさん
2008/10/12(日) 07:48:30まあ、いまどき某ランドというのも終わってるがw
0893デフォルトの名無しさん
2008/10/12(日) 09:44:58エラーとは関係ないと思うけど
0894デフォルトの名無しさん
2008/10/12(日) 09:59:18int a[SIZE] = {0,1};
int *p = a;
for (int i = 0; i < SIZE; i++)
p++;
というコード書いた場合に、i=1のときにp++のコード実行後にpに&a[2]の値が代入されてるけど、
実際に値を使わなければこれは不正な操作にはならないのですか?
たとえば、a[1]がメモリ空間の末端で、それ以降アドレスが置けない場合とか。
0895デフォルトの名無しさん
2008/10/12(日) 10:36:53ならない。アドレスと整数値を加算してそれが十分表現できる変数に代入されているだけだから。
また、それをプログラマが意図したことであるから。
逆参照するとセグメンテーション違反になるかもしれないけどね。
>>a[1]がメモリ空間の末端
それはない。この場合、グローバルまたはスタティク変数なら、データセグメントに配置され、
ローカル変数なら、スタックセグメントに配置される。
スタックセグメントは、高位から下位に向かって広がっていくイメージ。
まぁ、こういうの使って、バッファオーバーフローで攻撃したりするんだけど。
0896デフォルトの名無しさん
2008/10/12(日) 11:14:300897デフォルトの名無しさん
2008/10/12(日) 11:33:34>こういうの使って、バッファオーバーフローで攻撃したりするんだけど。
こういうのをみると、6809 の US/SS の例ひとつとっても、開発者の読みの深さに圧倒されます。
0898デフォルトの名無しさん
2008/10/12(日) 12:44:56超えなきゃvector<int>::size_typeの意味なくない
0899デフォルトの名無しさん
2008/10/12(日) 13:07:110900デフォルトの名無しさん
2008/10/12(日) 13:50:54【向上心】IT関連資格難易度表 第11章【持てよ】
http://namidame.2ch.net/test/read.cgi/lic/1219751634/
基本情報技術者 Part215
http://namidame.2ch.net/test/read.cgi/lic/1223386546/
ソフトウェア開発技術者試験Part121
http://namidame.2ch.net/test/read.cgi/lic/1223562467/
0901デフォルトの名無しさん
2008/10/12(日) 13:59:520902デフォルトの名無しさん
2008/10/12(日) 14:22:350903デフォルトの名無しさん
2008/10/12(日) 15:23:23コンストラクタを呼んでるつもり、でインスタンスがデリートされてるように見える、だけだろ。
今の C++ では初期化コード共有のためにコンストラクタからコンストラクタを呼ぶことはできない。
0904デフォルトの名無しさん
2008/10/12(日) 16:12:54一時オブジェクトをこさえているだけと言うことで宜しいか。
0905デフォルトの名無しさん
2008/10/12(日) 16:16:110906デフォルトの名無しさん
2008/10/12(日) 19:22:510907デフォルトの名無しさん
2008/10/12(日) 21:05:49おい。
ナウシカを人気キャラランキングから叩き落とした「ナディア」を忘れてるぞ。
0908デフォルトの名無しさん
2008/10/12(日) 21:06:440909デフォルトの名無しさん
2008/10/13(月) 01:49:070910デフォルトの名無しさん
2008/10/13(月) 01:52:360911デフォルトの名無しさん
2008/10/13(月) 01:53:17typedef int (WINAPI *fpointer)(int);
fpointer p;
このとき、p(x)= fnc(0,x)となる様にしたいのですがやり方ありますか?
0912デフォルトの名無しさん
2008/10/13(月) 01:55:01int WINAPI fnc0(int x) { return fnc(0, x); }
p = &fnc0;
0913デフォルトの名無しさん
2008/10/13(月) 02:02:010914デフォルトの名無しさん
2008/10/13(月) 02:08:50int WINAPI fnc(int x,int y){ return x+y*y+x*y; }
int WINAPI fnc2(int x){ return fnc(2,x); }
typedef int (WINAPI *FP)(int);
int main(){
FP p=fnc2;
for(int x=0;x<50;x++) printf("%d %d\n",p(x),fnc(2,x));
return 0; }
0915デフォルトの名無しさん
2008/10/13(月) 16:21:14ptr0^=ptr1;ptr1^=ptr0;ptr0^=ptr1;ってやって見たんだけど(ptr0,ptr1はchar*です)
エラー: 式に整数型または列挙型が含まれていなければなりません。
とか訳の解らないエラーが出ちゃいます><
__asmでやった時はすんなり通ったのに???
コンパイルできるやり方を教えて欲しいです、お願いします
オーエス:winxp32
Compiler:icl10.1(ia32)
0916デフォルトの名無しさん
2008/10/13(月) 16:26:33できない。
普通に入れ替えろ。それが本当に速度に貢献するとは思えない。
0917デフォルトの名無しさん
2008/10/13(月) 16:49:03キャストを駆使すればできないわけではない。
が、しかしそんなことはどうせ無意味だ。
http://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
0918デフォルトの名無しさん
2008/10/13(月) 16:58:14普通に入れ替えたらコンパイルできました!!ありがとうございます。
後でアセンブラで書き直すんだけど汎用レジスタ全部使う予定
多分mmは余るからmmとmovdで交換かxorで交換のになると思うけど、どっちの方が速いんだろう??
0919デフォルトの名無しさん
2008/10/13(月) 17:06:56ここはC/C++スレだ。
0920デフォルトの名無しさん
2008/10/13(月) 17:22:490921デフォルトの名無しさん
2008/10/13(月) 17:35:20レジスタ同士ならxchgはだめなの?
0922デフォルトの名無しさん
2008/10/13(月) 17:48:37すいません、もう消えますから許してください><
>>921
それ知りませんでした!!汎用命令も奥が深いですねorz
一度intelのpdf読み返してみます、教えてくれてアリガトウでしたノシ
0923デフォルトの名無しさん
2008/10/13(月) 18:31:29リッチですね(笑)
0924デフォルトの名無しさん
2008/10/13(月) 18:44:03一時変数に入れて交換しても最適化がかかると妥当な形にコンパイルされる。
最近 (といってもだいぶん前からだが) の CPU は特定の命令の組合せだと
並列に実行したりと、前後の文脈で速度が変わるので個々の命令だけ見て
たんじゃまともなコンパイラを上回るのは無理。
よほどのことがなければアセンブラで書いても遅くなるだけか、
労力に見合わない程度しか早くならないのが普通。
どうしても速くしたいなら、色々な組合せで実測するのが基本。
0925デフォルトの名無しさん
2008/10/13(月) 20:36:31は 警告を消すだけ。 と 関数を置き換える。
両方の情報があるけどどっちが本当なの?
0926デフォルトの名無しさん
2008/10/13(月) 20:44:140927デフォルトの名無しさん
2008/10/13(月) 20:49:20警告を消すだけ。
C++で_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESを定義すると、
可能なものはセキュア版に置き換えられる。
0928デフォルトの名無しさん
2008/10/13(月) 20:53:030929デフォルトの名無しさん
2008/10/14(火) 11:06:58Intel C++ 10.1をCentOS上で使っています。
0930デフォルトの名無しさん
2008/10/14(火) 12:13:23srand(time(NULL))
srand(GetTickCount())
などとすべき
0931デフォルトの名無しさん
2008/10/14(火) 12:13:57void func1(){}
typedef void (*PFUNC)(void);
PFUNC fa = func1;
PFUNC fb = &func1;
&をつけても、つけなくても違いは無いのでしょうか?
0932デフォルトの名無しさん
2008/10/14(火) 12:28:40fa = func1; が正解では? 付けても無視していると思う
0933931
2008/10/14(火) 12:36:20ありがとうございます。
コンパイル結果で出力されるファイル内容も同一でした。
0934デフォルトの名無しさん
2008/10/14(火) 12:50:170935デフォルトの名無しさん
2008/10/14(火) 12:55:230936デフォルトの名無しさん
2008/10/14(火) 12:58:05違いはある。
func1の型は、void (void)、で関数
&func1の型は、void (*)(void)、で関数ポインタ
ただし、関数から関数ポインタには、よきにはからってくれる。
配列から配列の要素の型へのポインタも、配列の先頭要素のポインタになる。
0937デフォルトの名無しさん
2008/10/14(火) 13:05:05だな
0938デフォルトの名無しさん
2008/10/14(火) 13:59:43ヽ / ̄ ̄ ̄`ヽ、
| | (・)。(・)|
| |@_,.--、_,>
ヽヽ___ノ 俺の使ったプログラムがノートンに除去されたでござる
の巻
0939デフォルトの名無しさん
2008/10/14(火) 17:37:420940デフォルトの名無しさん
2008/10/14(火) 18:01:31演算子オーバーロードされるとこの限りではない。
0941デフォルトの名無しさん
2008/10/14(火) 18:08:230942デフォルトの名無しさん
2008/10/14(火) 18:11:390943デフォルトの名無しさん
2008/10/14(火) 18:13:430944デフォルトの名無しさん
2008/10/14(火) 18:16:36それはどうやれば使えますか? GCC VCC BCCのどれかを教えてもらえませんか?
0945デフォルトの名無しさん
2008/10/14(火) 18:17:52ないなら、作ればいいんです。例えば、PHPをry、Perlとかでサクッとね。
0946デフォルトの名無しさん
2008/10/14(火) 18:21:190947デフォルトの名無しさん
2008/10/14(火) 18:25:070948デフォルトの名無しさん
2008/10/14(火) 18:36:38http://karetta.jp/article/blog/private-project-umetatechi/002122
プリプロセッサの話
C にはコンパイラ本体の他にプリプロセッサというプログラムが存在する。
コンパイラに比べてプリプロセッサの開発の方が楽である、と思われている節があるように
思えてならないが、それは大きな間違いである。
GPL でも良ければ MCPP という非常に優れたプリプロセッサがあるので、
それを同梱するという手もある。そうでない場合は decus cpp を使うのが良いかもしれない。
ちなみにこのドキュメントを見ると MCPP の松井氏は10年近くの歳月をかけ MCPP の完成度を上げていったようである。
私はこの10年という記述を読んでプリプロセッサの開発を諦めた。
0949デフォルトの名無しさん
2008/10/14(火) 19:52:240950デフォルトの名無しさん
2008/10/14(火) 19:57:13この返り値が1か0かを判定するためにintにキャストしてもいいでしょうか?
それとも元の関数にintの1か0を返させたほうがいいでしょうか?
0951デフォルトの名無しさん
2008/10/14(火) 20:00:54http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B0%E3%83%A2%E3%82%A4%E3%83%89%E9%96%A2%E6%95%B0
おもいっきり中間値があるように見えるのは目の錯覚?
0952デフォルトの名無しさん
2008/10/14(火) 20:12:31その関数はしらないけど、0.0か1.0しか返さないことがわかってるなら、func(x)>0.5でいいんじゃないか?
0953デフォルトの名無しさん
2008/10/14(火) 22:37:59>シグモイド (sigmoid) とは、シグモイド曲線 (sigmoid curve) ともいい、
曲線で1or0・・・?
0954デフォルトの名無しさん
2008/10/14(火) 22:44:510955デフォルトの名無しさん
2008/10/15(水) 00:20:21どうすればいいですか?
0956デフォルトの名無しさん
2008/10/15(水) 00:24:14&&には何か特別な意味があるのでしょうか?
#define OPDEF(a,b,c,d) \
&&LAB_ ## a,
0957デフォルトの名無しさん
2008/10/15(水) 00:29:55std::vector<T> output;
std::transform(v1.begin(), v1.end(), v2.begin(), std::back_inserter(output), std::plus());
0958デフォルトの名無しさん
2008/10/15(水) 00:34:52gcc独自の拡張で、goto用ラベルのアドレスを取れるという機能がある
それ
0959デフォルトの名無しさん
2008/10/15(水) 00:35:47プリプロセッサとしては、何も意味はない。
0961デフォルトの名無しさん
2008/10/15(水) 01:52:43すげえ、、、、
ありがたく使わせていただきます。
0962961
2008/10/15(水) 03:25:32コンパイルが全然通りません。以下は何が間違ってるのでしょうか。
using namespace std;
class myFunctor : public binary_function
{
public:
result_type operator()(first_argument_type a, second_argument_type b) {
return a+b;
}
};
0963デフォルトの名無しさん
2008/10/15(水) 03:29:210964デフォルトの名無しさん
2008/10/15(水) 03:32:39あるよ。引数のどっちかいっこでもマイナスの場合、結果の符合は処理系定義。
C99 や次期 C++ では商が常にゼロに向かって切り捨てになると決まるので、
それに伴って剰余も定まるようになる。どうしてもどっちかに決めうちにしたいなら、
使ってるコンパイラの動作を確認したうえでこれに従うのがいいかもね。
0965デフォルトの名無しさん
2008/10/15(水) 03:35:04継承してるbinary_functionにテンプレートパラメータを指定しないと
0966デフォルトの名無しさん
2008/10/15(水) 03:35:15それはどこから拾ってきた情報?
規格(ISO 2003)見たら、正%正のときだけ決まってて、それ以外は全部処理系定義になってたよ。
0967デフォルトの名無しさん
2008/10/15(水) 04:15:33mallocと言う関数を習いました。
これはどのくらいの容量が必要なとき使うべきでしょうか?
char buff[64]
char buff[128]
char buff[256]
char buff[512]
char buff[1024] <-このくらい?ならmallocを使うべきですか?
0968デフォルトの名無しさん
2008/10/15(水) 04:23:46容量よりは寿命で決まることのほうが多いけど、確かに 1k 超えるあたりで
スタックが心配になってくるから、そんな感じで使い分けても良いと思うよ。
0969961
2008/10/15(水) 07:10:02ありがとうございます。教えてもらったとおりにやったらできました。
ところでSTLでtransform()の最後とかにファンクタを使うとき、どうして括弧が必要なんでしょうか?
plus<int>だけでファンクタとしては成立しているような気がするんですが。
int x[10], y[10], z[10];
transform(x, x+10, y, z, plus<int>());
0970デフォルトの名無しさん
2008/10/15(水) 07:41:54場合による
1Mのスタックでmain( )からちょこっと呼ばれる関数だったら気にしない
0971デフォルトの名無しさん
2008/10/15(水) 08:30:41コンストラクタを呼び出すから
0972デフォルトの名無しさん
2008/10/15(水) 11:03:07この条件式をもっとクレバーに書くことってできますか?
0973デフォルトの名無しさん
2008/10/15(水) 11:08:12素直に a == 1 && b == 1 と書いたほうが分かりやすいと思うけど。
0974デフォルトの名無しさん
2008/10/15(水) 11:12:13後者がわかりやすいですね。
そう書けばよかったんですか。ありがとうございました
0975デフォルトの名無しさん
2008/10/15(水) 11:12:49全然動作違うじゃん。 1 と 255 でも真になっちゃうよ。
0976デフォルトの名無しさん
2008/10/15(水) 11:37:20あるよ。
以上。
はい次の方。
0977デフォルトの名無しさん
2008/10/15(水) 12:18:17鬼ですね、いや、>>972の為を思ってか・・・。深いな。
0978デフォルトの名無しさん
2008/10/15(水) 12:26:01if (a * b == 1)
と書いてもいい
0979デフォルトの名無しさん
2008/10/15(水) 12:26:52ってやるとどうなるの?
0980デフォルトの名無しさん
2008/10/15(水) 12:29:580981デフォルトの名無しさん
2008/10/15(水) 12:47:55見つからない…どうやって実現するべき?
0982デフォルトの名無しさん
2008/10/15(水) 12:54:000983デフォルトの名無しさん
2008/10/15(水) 12:59:49a==1 && b==1
でいいじゃん
0984デフォルトの名無しさん
2008/10/15(水) 13:02:560985デフォルトの名無しさん
2008/10/15(水) 13:04:020986デフォルトの名無しさん
2008/10/15(水) 13:04:39system("cp hoge.txt hage.txt");
0987デフォルトの名無しさん
2008/10/15(水) 13:06:20MyObject* f(void)
{
static MyObject obj;
return &obj;
}
0988デフォルトの名無しさん
2008/10/15(水) 13:22:18作ったオブジェクトを引数か戻り値かなんかで他の関数に渡せばいいと思う
0989デフォルトの名無しさん
2008/10/15(水) 13:38:410990デフォルトの名無しさん
2008/10/15(水) 13:46:19それはMFC関係無しに、ある程度の規模のプログラミングなら普通の空気。
0991デフォルトの名無しさん
2008/10/15(水) 14:41:11もしくはvectorのHDD上の実装ありますか?
0992デフォルトの名無しさん
2008/10/15(水) 14:52:00メモリ上で処理した後シリアライズする方が楽だと思うぞ。
0993デフォルトの名無しさん
2008/10/15(水) 14:53:200994デフォルトの名無しさん
2008/10/15(水) 14:55:20__int16 data[600];
int i = 300;
data[i]= 500;
Data = (325 - (data[i] / 32768 * 225));
data[i]の中身がいくつだろうとDataに入る値が325なんですが、中間処理は不動小数点で計算してくれてないんですか?
0995デフォルトの名無しさん
2008/10/15(水) 15:01:48整数同士の計算は整数の範囲でしか計算してくれません
0996デフォルトの名無しさん
2008/10/15(水) 15:02:080997デフォルトの名無しさん
2008/10/15(水) 15:07:42(a==1)の結果がbool型になるからダメ
0998デフォルトの名無しさん
2008/10/15(水) 15:16:240999992
2008/10/15(水) 15:21:21stringをHDDに置くには、アロケータを作った後どのように宣言すればいいですか?
vector< string > → 使用後 の書き方教えてください
1000デフォルトの名無しさん
2008/10/15(水) 15:21:2110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。