トップページ⇒tech
1001コメント302KB

C++相談室 part13

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの引き篭もり NGNG
怪しい仕様は細々ありますが大丈夫です!
elegantなソースを目指してね。

( ^-゚).。o(きっと関連URLは >>2-5 辺りだよ)
0951デフォルトの名無しさんNGNG
>>949
upper_boundの逆ってことで、推して知ってやるところだと思われ。
0952デフォルトの名無しさんNGNG
std::vector, std::deque, std::listの場合は話はややこしくなるな。もっとも
これらのコンテナにはメンバ関数にはupperboundはないが。だから
標準アルゴリズムのstd::upper_boundを適用したと仮定して、

1 2 3 4 4 4 5 6 7
となっていたとして、upperbound(4)の逆とは、

1 2 3 4 4 4 5 6 7
    ^        ここを指すのか(lower_bound)、
1 2 3 4 4 4 5 6 7
      ^      ここを指すのかで話が違ってくる。

連想コンテナではどちらでもよい。同一キーの順序づけがないんだから。
0953デフォルトの名無しさんNGNG
下みたいに{〜}の中で作成したオブジェクトは{〜}抜ける場合に必ず破棄されるの?
実装依存?

printf("before);
{
 foo b:
}
printf("after");
0954デフォルトの名無しさんNGNG
>>953
当然破棄。これはCもC++も同じ。
0955922NGNG
>>933
解決しました。memcpyでOKでした。レスありが�dございました。
SOCKADDR sock; SOCKADDR_IN soin;
memcpy( &sock, &soin, sizeof(SOCKADDR) );
0956デフォルトの名無しさんNGNG
>>955
サイズが全く同じなら
SOCKADDR sock;
SOCKADDR_IN soin;
soin = *reinterpret_cast<SOCKADDR_IN *>(&sock);
で出来ないことはない。
一応参考までに。
0957928NGNG
色々ありがとうございます。

説明も悪かったみたいで、
例えばset内に 1 2 4 とある場合、引数が
5の場合4
4の場合2
3の場合2
2の場合1
1の場合エラー
0の場合エラー
という処理をしたかったんです。

結局、
if (s.empty()) return false;
pos = s.lower_bound(key);
if (pos == s.begin()) return false;
pos--;
// 以降該当したものがある場合の処理
というようにしました。

みなさんありがとうございました。
0958デフォルトの名無しさんNGNG
激しく初歩的な質問ですみません。
class A{
public:
 A(int n); // コンストラクタ
};
class B: public A{
}
int main(){
 B x(5);
}
とやったらエラーが出るんですけど、コンストラクタって継承されないんですか?
0959デフォルトの名無しさんNGNG
class B:public A{
public:
B(int n):A(n){}
};
0960デフォルトの名無しさんNGNG
>コンストラクタって継承されないんですか?

yes
0961デフォルトの名無しさんNGNG
template<typename T>T t=0;
が通る(VC)だけど、意味あるの?
0962デフォルトの名無しさんNGNG
>>961
ちょっと訊きたいんだけど、どうしてそういうコードを書こうと思ったの?
0963デフォルトの名無しさんNGNG
偶然書き間違えて、F7押したらエラーが出なかったの。
0964デフォルトの名無しさんNGNG
>>961
> test.cpp(10): error C2998: '<template parameter>t': テンプレート定義にはなれません。
と言われてしまったが。
0965デフォルトの名無しさんNGNG
961 の VC は、実はビタミン C
0966デフォルトの名無しさんNGNG
C with classes のソースとかってどこかに落ちてないでしょうか?
検索に引っかかりにくい名前なもので探せないのです。
0967966NGNG
わかりづらかったような気がするので補足です。
コンパイラ(コンバータ)のソースという意味です。
0968デフォルトの名無しさんNGNG
スレ違いじゃないか?
0969デフォルトの名無しさんNGNG
10年以上前の代物でわ・・・
0970デフォルトの名無しさんNGNG
そういえば、ないね
リッチーのHPにはBのソースとかあるのに
ストラウストラップのHPには昔話が見当たらない
0971デフォルトの名無しさんNGNG
未来を見据えるC++

ところで誰も新スレ立てないけどどうして?
ちゃんとhttp://std.dkuug.dk/jtc1/sc22/wg21/も入れといてね。
0972デフォルトの名無しさんNGNG
cfrontはけん?

http://www.unipress.com/toolkit/cfront.html
0973デフォルトの名無しさんNGNG
スレが終了する間際なので厨房質問をさせてください。
基底 class CGorua{略};
派生1 class CMorua : public CGorua {略}
派生2 class CHorua : public CGorua {略}
派生3 class CForua : public CGorua {略}
があり、派生クラス1〜3のオブジェクトを1つずつ作成しました。
また、別のクラスとしてCAhyaがあり、オブジェクトを1つ作成しました。

派生1〜3から、CAhyaのオブジェクトを使うにはどうしたらいいのでしょうか。
グローバルでCAhya ahyahya;と宣言するのでしょうか。
どうぞよろしくおねがいします。
0974デフォルトの名無しさんNGNG
>>973
friend class
0975デフォルトの名無しさんNGNG
>>980
you should stand thread of continuing!
0976973NGNG
>>974
ありがとうございました。
やってみます。
0977966NGNG
>>968
微妙な所ですけど、汎用相談スレに書いて解答が得られるとも思えず、
専用スレを立てるのは明らかに荒らしなので、結局ここしかないんですよね。

>>969
文化的価値から知的興味+この間の C マガの特集を見て
コンバータ作りたいなぁ…なんて思ってたりして、その参考も含めてなんです。

>>970
エイプリールフールのジョークならあるのにね(あれはストラウストラップのページじゃないんですっけ?日本語訳しか読んだことないので不明かも)

>>972
サンクスコです。…でも商品ぽいですね…。さすがにお金だして買う気はしないです。ごめんなさい。

せっかくなので初心者さんの質問にも答えてみます。

>>973
質問の意図が不明です。public な部分を使うだけならどこからでも出来ますよ。
全体で唯一のインスタンスを使うならグローバル変数より Singleton と呼ばれる方法を使う方がスマートです(わからなければ検索サイトで Singleton を検索してみてください。)
アクセスコントロールの話の場合は >>974 さんの回答の通り friend にするのが手っ取り早い方法ですが、あまり好ましくありません。
アクセスを制限する Adapter クラスを通して使うとよいかもしれません。

ってなんかデザパタの宣教師みたいな回答になっちゃったな…。
0978デフォルトの名無しさんNGNG
char size[sizeof(T)];

と、したときの領域を動的に削る方法ってあります?
0979デフォルトの名無しさんNGNG
冬休みだから久しぶりに覗いてみたけど、このスレはまともですね(w

>>973
>オブジェクトを使う
とあるから、単に関連を張りたいだけの気がする。
CAhyaがプログラム中で一度しか出てこないならsingleton
多数出てくるなら、派生1〜3のコンストラクタに
ahyahyaへのポインタを渡すか、関連を張る関数を用意する。

>>978
いみふめ
静的に確保した領域は動的には変更できませんよ?
多分 vector<char> が望みのものだと思うけど
0980デフォルトの名無しさんNGNG
placement newで質問です。

void* operator new(size_t size,void* buf){return buf;}

template<typename T,size_t reg=1>struct TSA{
enum{num=reg};
char p[sizeof(T)*num];
T* pt;
TSA(){pt=new(p)T;}
};
class X{void func(){}};
/**************************************************************/
void main(void)
{
TSA<X> tsa;
cout<<&tsa.p<<sizeof(tsa.p)<<endl;
cout<<&tsa.pt<<sizeof(tsa.pt)<<endl;
}
となっているとき、pとptのサイズが違うんですが、これって正しいのですか?
あと、アドレスも違うのですが。
0981デフォルトの名無しさんNGNG
> これって正しいのですか?
正しい
> アドレスも違うのですが。
あたりまえ
0982こうか?NGNG
int main()
{
 char p[100];
 char *pt;
 pt = p;
 cout<<&p<<sizeof(p)<<endl;
 cout<<&pt<<sizeof(pt)<<endl;
}
となっているとき、pとptのサイズが違うんですが、これって正しいのですか?
あと、アドレスも違うのですが。
0983デフォルトの名無しさんNGNG
>>982
ptの「中身が」pのアドレスっていうだけだからどっちもそれで正しい
0984982NGNG
いや、俺は980の疑問をわかりやすく書き直しただけなんだが。
0985982NGNG
>>984
そうか。
0986デフォルトの名無しさんNGNG
質問です。
sscanf( argv[1]+1, "%2x", &x );
ココのargv[1]+1の部分はどういった処理なんでしょうか。
argvはchar型なので文字列連結では無いとは思うのですが。。
0987デフォルトの名無しさんNGNG
man sscanf
0988デフォルトの名無しさんNGNG
そろそろ埋めるか
0989デフォルトの名無しさんNGNG
>>986
argv は char **型じゃないの?
あんたのプログラムがどうなってるか知らんから分からんけどなー
0990デフォルトの名無しさんNGNG
990!!
0991デフォルトの名無しさんNGNG
ところで新スレは?
0992デフォルトの名無しさんNGNG
992
0993デフォルトの名無しさんNGNG
>>991
ここ
http://pc3.2ch.net/test/read.cgi/tech/1025441630/l50
0994デフォルトの名無しさんNGNG
梅
0995デフォルトの名無しさんNGNG
>>994 ちょいと松
>>993でいいのか?
0996デフォルトの名無しさんNGNG
996
0997デフォルトの名無しさんNGNG
埋めて埋めて
0998デフォルトの名無しさんNGNG


998!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0999デフォルトの名無しさんNGNG
とっとと埋め
1000デフォルトの名無しさんNGNG
999!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。