【初心者歓迎】C/C++室 Ver.42【環境依存OK】
time.hのtm構造体についての質問です。
なぜtm_monは0〜11であり、
なぜtm_mdayは1〜31なのでしょうか。
どちらか一方にそろえる形で両方を0から起算、1から起算とするわけには
いかなかったのでしょうか。
(´・ω・`)知らんがな
K&Rにでも聞きにいってくれ。
>>952 英語では月を 1, 2, ..., 12 と書くよりも January, February, ..., December のように書くので、
配列のインデックスとして直接使える方が良かった(例:↓)という説がある
const char *monthNames[12] = { "January", "February", ..., "December" };
printf("%s", monthNames[t.tm_mon]);
日は英語でも 1st, 2nd, ..., 31st のように書くので、1...31 そのままなんだろ、たぶん
車輪の再発明と車輪がどういう仕組みかを理解する事は違う。
誰もその車輪の性能を説明してくれない。車輪作った人ですらも。
挙句の果てに「使ってから文句家」「自分で分解して調べろ」だろ。
これじゃどうしようもない
使い方の説明もいいかげんだから
ばらしながら使い方覚えないと駄目だしね
しかし教材として考えればなかなかいいかもしれん
膨大なMLにヒントは用意されているし
replace_copy_if(v.begin(), v.end(), back_inserter(v2), bind2nd(ptr_fun(str_comp), "C"), "C++");
これ、Borland Turbo C++ だとコンパイルできない。
g++だとできる。
"C++"を string("C++")にするとTurbo C++はコンパイルできる。
単なる実装の違いということ?
旧い実装のコンパイラなんか使うからだろ。
>>960 コンパイラじゃなくてライブラリじゃないの?
>>957 何を期待してるの?
どうしようもない。っていう意味には、
あなたのスキルが低いからという理由も含まれるんだよね?
少なくとも車輪を分解して調べられる。
これをメリットととるかデメリットととるかだな。
サポート期待するなら、商用製品買えばいい。
分解するのがめんどくさいなら、自分で作ればいい。
選択する自由は自分にあるだろ。
ま、使いづらい・わかり辛いとかって時点で車輪じゃないんだろうな。
個人の技術レベルをあげるほうがのほうが先だろうけど。
list<CHoge *>で持ってるメンバ変数を
const list<const CHoge * const> &の参照で返す関数を作りたいんですが
単純にキャストすると怒られます
どうすればいいんでしょうか
今は仕方ないので別にlist<const CHoge * const>を作ってコピーしてますが
const参照させるためだけに全く同じ内容のリストを作るのが嫌なんです
何とかならないでしょうか
>>964 CHoge * と const CHoge * const はバイナリレベルで互換することが保証されて
いるので、 list 自体も const な参照ならキャストしちゃっても安全だと言えると思う。
コメント添えてキャストすればいいんじゃない?
ただし public なインターフェースであればメンバへの参照を返すのは実装を
固定することに繋がるのでお勧めしない。
>>962 仕様書くらい用意しろボケ
という話です
用意終わた
いえーい!
>>955 なるほどthx、ちょうど友人と配列に英語での名前取った時に都合がいいんじゃ
ないかって議論もしてました。
>>968 なるほどthx、ちょうど友人と配列に英語での名前取った時に都合がいいんじゃ
ないかって議論もしてるんじゃないかって議論もしてました。
970 :
デフォルトの名無しさん:2007/09/26(水) 20:28:09
int data[10] ={10,20,30,40,50,60,70,80,-999} このようなint配列があります 配列の内容を実行結果のように表示するプログラムを作りなさい -999になれば処理を終了します
ポインタを固定して表示させる処理とポインタを変化させて表示させる処理の2つ作成しなさい
この内容がわからないので教えて下さいお願い致します
命令形で問われても答える気になれない
実行結果のようにとか言っておきながらないし
>>970 >配列の内容を実行結果のように表示する
実行結果がわからんから答えられないなあ
要は添え字で処理するかポインタで処理するかということか?
添え字なら data[i] で扱って i を変えてく
ポインタなら
int *p = data; pを順番に進めていけばいいんでないか?
しかし実際はどちらもポインタ演算という…
976 :
デフォルトの名無しさん:2007/09/26(水) 21:21:46
[1] 授業単元: 教科書
[2] OS Windows
[3]問題
int data[10] ={5,8,10,2,1,14,35,6,12}:
配列中の最大値と最小値を表示するプログラムをポインタを使用して作成するプログラムが解らないので教えて貰えませんか?
宿題スレへ池
max_element
min_element
979 :
デフォルトの名無しさん:2007/09/26(水) 23:22:39
int a[0] = {10};
int a = 10;
って実質的に同じ?
int a[0] = {10};
int b = 10;
*(a + 0) == a[0] == b
ん?int a[0]ってコンパイル通るのか?
蟹炒飯をググってみたがさっぱりわからんかった。
そしてコンパイルは通らなかった。(VSEE 2008)
C99からの仕様?俺の無知?だんだん不安になってきた・・・
struct TEST
{
DWORD dammy ;
BYTE x ;
DWORD dammy2;
BYTE y;
};
TEST Test ;
ZeroMemory(&Test, sizeof(TEST)) ;
Test.x = 0xAA ;
Test.y = 0xBB ;
脳内結果予想
00 00 00 00 AA 00 00 00 00 BB
現実
00 00 00 00 AA 00 00 00 00 00 00 00 BB 00 00 00
なんです?
986 :
985:2007/09/27(木) 02:23:54
途中で送信してしまいました><
なんでこういう結果になるのかわからないです。よろしくお願いします。
>>986 DWORDが4バイト境界に配置されたため。
しかも説明が抜けてる。il||li(つω-`。)il||li
バイナリはファイルに保存したときに思い通りにならないって話です
>>986 アライメント、パディング、構造体とかでぐぐれば幸せになれるよ。
*char[] = {"hoge","hage","boke"}
こういう初期化を std::string 使って表現出来ないのでしょうか?
std::string *Bjarne_Stroustrup[] = {new std::string("hage"), new std::string("hage"), new std::string("hage")} ;
994 :
デフォルトの名無しさん:2007/09/27(木) 11:39:57
995 :
デフォルトの名無しさん:2007/09/27(木) 11:50:57
vs2005を使ってるんですが、グローバルな関数の関数ポインタと
クラスのメンバ関数の関数ポインタを統一的に保持しておきたいです。
(どんな自作クラスのメンバにでも対応したい)
実現する方法があれば書き方を具体的に教えてください。
class CFuncHolder{
private:
void (*m_pFunc)(char*);
public:
CFuncHolder(){};
void SetFunc(void (*pfunc)(char*)){m_pFunc = pfunc;}
void RunFunc(char* str){m_pFunc(str);}
};
void gfunc(char* str){
MessageBox(NULL,str,"",NULL);
}
class cfunc{
public:
void func(char* str){MessageBox(NULL,str,"",NULL);}
void (cfunc::*GetFuncPtr())(char*){return &cfunc::func;}
};
void main(){
CFuncHolder fh;
fh.SetFunc(gfunc);
fh.RunFunc("hohoho");
//cfunc cf;
//fh.SetFunc(cf.GetFuncPtr());
}
そんなあなたに boost::function
997 :
デフォルトの名無しさん:2007/09/27(木) 12:43:20
>>996 ども。保持する方は、
class CFuncHolder{
private:
boost::function1<void, char*> m_func;
public:
CFuncHolder(){};
void SetFunc(void (*pfunc)(char*)){m_func = pfunc;}
void RunFunc(char* str){m_func(str);}
};
とかでいいんですよね?
で、渡す方は、boost::bindとやらが使えるっぽいのですが、書き方がさっぱり分かりません。
void gfunc(char* str){
MessageBox(NULL,str,"",NULL);
}
class cfunc{
public:
void func(char* str){MessageBox(NULL,str,"",NULL);}
void (cfunc::*GetFuncPtr())(char*){return &cfunc::func;}
};
void main(){
CFuncHolder fh;
//グローバルの関数ポインタを渡す
fh.SetFunc(gfunc);
fh.RunFunc("hohoho");
//クラスメンバの関数ポインタを渡す
cfunc cf;
//fh.SetFunc( boost::bind(/*?????*/) );←ここの書き方教えてください。
fh.RunFunc("hehehe");
}
boost::bind(&cfunc::func, cf, _1);
ごめん↑のは多分動かない
1000 :
デフォルトの名無しさん:2007/09/27(木) 12:59:39
そして伝説へ・・・
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。