[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 16:03 / Filesize : 231 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 12



1 名前:デフォルトの名無しさん [2009/07/19(日) 22:32:32 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/

33 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:57:47 ]
いまさらですが、メンバを変更しないメンバ関数にはconstをつけるようにし始めました。
ただ、メンバを参照すらしない、ただの便利関数みたいなのがあるのですが、
これについてはconstではなく、staticメンバにするのがスジでしょうか?
便利関数を分類してまとめてライブラリにするのがまっとうな流れだとも思いますけど…

34 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 14:01:40 ]
>>33
static関数にするとクラス名に依存することになるので、
仮令そのインスタンスを参照していなくても密接に関わる関数ならconstメンバでいいと思う。
また、クラスそのものにも関係ないような関数ならそもそもメンバにしておかない方がいい。

35 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 14:02:51 ]
privateなstaticメンバ関数ならよく作ってるよ
もちろんstaticな便利関数をユーティリティクラスにまとめることもある
要するにどっちもアリ

36 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 14:11:44 ]
ご意見ありがとうございました。
クラスとの関係が強いものについてはconst、そうではないものについてはprivateなstaticにしようと思います。

メンバに入れるべきでは無いというのは重々承知しておりますが、当方、メンテのため。。やむを得ずです。

37 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 19:49:05 ]
#include <iostream>
using namespace std;
int x = 0;
class B {
public:
    B() : b(::x) {};
    virtual ~B() {};
    void func() {cout << __FUNCTION__":" << b << endl;};
    virtual void vfunc() {cout << __FUNCTION__":" << b << endl;};
private:
    int b;
};
class D : public B {
public:
    D() : d(::x) {};
    virtual ~D() {};
    void func() {cout << __FUNCTION__":" << d << endl;};
    virtual void vfunc() {cout << __FUNCTION__":" << d << endl;};
private:
    int d;
};
int main(void) {
    B& r = D();
    r.func();
    r.vfunc();
    x = 100;
    r = D();
    r.func();
    r.vfunc();
    return 0;
}

38 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 19:49:46 ]
B::func:0
D::vfunc:0
B::func:100
D::vfunc:0

2回目のD::vfuncが0になるのはどうして?

39 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 20:15:55 ]
まず、B& r = D();がコンパイルエラーにならない時点でダメ。もし、VCなら必ず/W4か/Zaを付けろ。

仮に、D d; B& r = d;だとして話を進める。
r = D();は左辺の型がB&だから、クラスBの暗黙に生成されるoperator =(const B&)が呼ばれる。
それは当然Bのメンバを代入するだけなので、r.dの値は変化しないというわけ。

40 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 20:24:07 ]
なるほど!d!

41 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:27:54 ]
すごいことかんがえたぞ!ぼくてんさい!あいちゃん!
もうたんじゅんなせったげったをかくひつようはないよ!
class Accessor {
protected:
template <typename T> class Proxy {
private:
T m_val;

public:
Proxy() : m_val() {}
Proxy(const T& val) : m_val(val) {}
Proxy(const Proxy& rhs) {m_val = rhs.m_val;}
Proxy& operator=(const Proxy& rhs) {m_val = rhs.m_val; return *this;}
operator T() const {return m_val;}
};
};

class Foo : public Accessor {
public:
Proxy<int> m_bar;
Proxy<double> m_baz;
};

int main(void) {
Foo foo;
foo.m_bar = 100;
foo.m_baz = 1.23;
cout << foo.m_bar << endl;
cout << foo.m_baz << endl;
return 0;
}



42 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:24:57 ]
OPENGL(c++でコーディング)の描画処理のなかの、
「(A型の変数) = (A型の変数)」(×約6000ループ)
という処理をわけあって、
「(A型の変数) = (vector< vector< A > >型の変数)」(×約6000ループ)
という処理に変えただけで滅茶苦茶重くなりました

データ量だけでなく、代入処理でも速度に違いが出てくるものなのでしょうか?

43 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:33:00 ]
A型の変数にvector< vector< A > >型の変数をいれられるの?

44 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:34:40 ]
代入演算子さえ書けば・・・

45 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:50:56 ]
書き方が悪かった・・・実際にはこんな感じです

// 軽いバージョン
A vertex;
A vertex_data[n];
B face[n];
for(int i=0;i<6000;i++){
for(int j=0;j<3;j++){
vertex = vertex_data[(face[i].v_index[j])];
}
}



// 重いバージョン
A vertex;
vector< vector<A> > vertex_data;
vector< vector<B> > face;
for(int i=0;i<1;i++){ // 必須の記述
for(int j=0;j<6000;j++){
for(int k=0;k<3;k++){
vertex = vertex_data[i][(face[i][j].v_index[k])];
}
}
}

46 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:51:06 ]
毎週ジャンプ1冊買って帰ってたのを
わけあって100冊買って帰るように
しただけで滅茶苦茶筋肉痛になりました

冊数だけでなく、歩き方でも体の負担に違いが出てくるものなのでしょうか?

47 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:54:05 ]
それだとそんなに重くならないような気がするなぁ
役に立てそうにない

48 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:55:55 ]
またデバッグバージョンとかいうオチじゃ・・

49 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:06:12 ]
アッー!

どっちもデバッグモードでした(・ω・)
ループ外の初期処理が相当重くなったんですが、
デバッグモードだとループ内の処理速度にも影響を及ぼすということでしょうか・・・?

50 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:07:48 ]
ちなみにリリースにするとどっちも速度はほぼ同じになりました(´д`;)

51 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:11:45 ]
ループ外が重くなったというのはさておき、
ループ内の処理速度が相当遅くなってることは明らかだったの?



52 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:15:23 ]
明らかでした。
1秒30フレームで動いていたものが1秒1フレームくらいになりました

53 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:20:10 ]
そっか。変なこと言ってスマソ。
リリースビルドでがんばれ?

54 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:20:19 ]
あ、ループ内の処理速度が遅くなった・・・のではなく、
実行時はループ外は関係ないので、ループ内の処理が重くなってるんだろう・・・と考えたのです

実際、ループ内の処理速度に違いがあるかはよくわかりません。
ただ、ループ外で大幅に処理を追加したので、そいつがデバッグモードだと実行時に常に影響を与え続けるのかな?という疑問です

55 名前:49 mailto:sage [2009/07/22(水) 20:24:42 ]
あ、言うの忘れてしましたが環境はXP、Visual Studio 2005です
念のため。

56 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:26:47 ]
vectorとかデバッグ時にはありがた迷惑なエラーチェックをたくさん入れてくれて遅くなるかもしれない
リリース時にはきれいさっぱり消え去ってあんまり影響ない

57 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:40:22 ]
>>56
VCだとReleaseでも有難迷惑なコードが大量にorz...


58 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 00:50:22 ]
Releaseでなんか残ったっけ?

59 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 01:18:49 ]
>>58
VC8から、Debug/Releaseの指定にかかわらず、
もれなくvector/dequeのoperator []やイテレータに範囲チェックが入るようになった。
それが要らないなら_SECURE_SCLを0と定義する。
msdn.microsoft.com/en-us/library/aa985896.aspx

60 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:25:17 ]
中身が同じ2つのメンバ関数が必要なんだがどうすればいい?
const T* hoge() const;
T* hoge();
それなりに長いんでコピーしたくない

61 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:28:34 ]
const_castして呼び出せ



62 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:30:15 ]
>>60
Effective C++くらい読もうよ。

63 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:43:58 ]
>>61 トン
>>62 前見たときこれは無理と思ったけどそろそろ読めるかも


64 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:03:04 ]
>>63
要するにthisをconst_castな
Effective C++の初版の21項
「使える時は、必ずconstを使おう」を読むと良い

65 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 12:55:48 ]
Effective C++は邦訳の改訂第2版しか持ってないんですが
初版の古本とか見たら買ったほうがいいですか

66 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:05:34 ]
>>65
改訂2版でいいよ
俺が言ったのは第3版との区別を付けるため

67 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:18:33 ]
こんな感じかえらい汚いなあ

template <class T>
class Test {
T i;
public:
Test(T t) : i(t) {}
T* func() {
return &i;
}
const T* func() const {
return const_cast<const T* const>(const_cast<Test<T>* const>(this)->func());
}
};

int main()
{
Test<double> t(123);
const Test<int> t2(456);

std::cout << *t.func() << std::endl;
std::cout << *t2.func() << std::endl;
}

68 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:58:53 ]
釣りか素か知らんが黙っとれ

69 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 16:01:38 ]
>>68
お馬鹿?

70 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:09:54 ]
釣り・・・だよなw

71 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:32:59 ]
iterator it;

(*it).guhehe();


なんで皆これを

it->guhehe();

にしないの?



72 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:34:31 ]
皆ってどの範囲の皆?

73 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:51:33 ]
>>71
エスパー回答すると、以前のSTLのイテレータは後者の
書き方ができなかった

74 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:56:49 ]
ファクトリメソッドに関してなんですけど、独習デザインパターンという本に
class FooFactoryBase {
    public: virtual Foo* create() = 0;
};
class HogeTypeFooFactory {
    public: virtual Foo* create() {return new HogeTypeFoo();}
};
int main(void) {
    FooFactoryBase* factory(new HogeTypeFooFactory());
    Foo* foo(factory->create());
    foo->vfunc();
    delete foo;
    delete factory;
}
とするとクライアントのほうの変更も少なくて便利だよ、みたいな事が書いてあったんですが
なぜこんなまどろっこしいことをするんでしょうか?関数ポインタを使って
typedef Foo* (*createFoo)();
HogeTypeFooFactory {
    public: static Foo* create() {new HogeTypeFoo();}
}
int main(void) {
    createFoo create(HogeTypeFooFactory::create);
    Foo* foo(factory->create());
    foo->vfunc();
    delete foo;
}
と、書いたほうがnew/deleteも少ないし、コードも短いし、仮想テーブルの分メモリも少なくてすむし
再コンパイルするのは新規のファクトリとそれを使うクライアントだけだし、いろいろと優れてるように思えます
継承を使って新しいファクトリを作る利点ってほかに何かあるんでしょうか?

75 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:19:31 ]
答えは簡単、Javaには関数ポインタがないからさ

76 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:28:43 ]
んー、どっちでもいいような気もするねぇ。
ところで、関数ポインタ版の
Foo* foo(factory->create());は
Foo* foo(create());じゃないの?

77 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 14:22:04 ]
>>66
回答ありがとうございます。ちょっと安心しました。

Efecctive C++第3版も買いたいと思ってますけど、
Amazonレビューみるかぎり翻訳がよくないらしいですね…

78 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 14:44:16 ]
そお?悪くはなかったよ。
改定第2版を訳してる吉川邦夫先生に比べると落ちるというだけで。
少なくともMore Effective C++よりは数段いいし、
Effective STLと比べても良く出来てる。

79 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 15:14:25 ]
>>77
翻訳はそこまで悪くない。
Amazonのレビューは鵜呑みにしないほうが良いと思う。

80 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:36:01 ]
#include <iostream>

namespace name1 {
void func() {std::cout << __FUNCTION__ << std::endl;}
};

namespace name2 {
void func() {std::cout << __FUNCTION__ << std::endl;}
};

int main(void) {
using name1::func;
func();
func();
func();

using name2::func;
func();
func();

return 0;
}

こんな感じでusingを使いたいんですが、名前が競合していけませんよといわれました
前回のusingをキャンセルする、上書きする方法はありませんか?

81 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:02:02 ]
>>80
int main(void) {
{
using name1::func;
func();
func();
func();
}
{
using name2::func;
func();
func();
}
return 0;
}
これじゃ駄目なの?



82 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:09:49 ]
その手がありましたか!
関数ポインタ使うところまでは考えたんですがこれのほうがわかりやすくていいですね

83 名前:デフォルトの名無しさん [2009/07/25(土) 17:42:12 ]
class Point{
double m_x,m_y;
Point():m_x(0.0),m_y(0.0){};
};
Triangle{
Point m_p[3];
Triange():((m_p(){Point()});
};
上のような感じで、Triangleのコンストラクタでm_p[]の初期化を行いたいのですが、
やり方がよくわかりません。m_p[]をうまく初期化する方法はないでしょうか

84 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 17:53:36 ]
C++にて

double型の変数xが
確実に正の数(0でないことも負でないこともわかっている)であるとき、
それを10進表示した整数部分の桁数を求める
最も良い(簡単&速い&標準C++準拠)な方法は何でしょうか?



85 名前:84 mailto:sage [2009/07/25(土) 17:55:48 ]
追記
  文字列表示させる方法もありで。


86 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:09:17 ]
10以下になるまで10で割って割った回数を計ったりするのが一般的
データの分布がdoubleの表現範囲で一様なら二分探索のほうが早いかな

87 名前:84 mailto:sage [2009/07/25(土) 18:18:42 ]
>>86
俺はいつも(って程でもないが)
std::log10でやったりしているんだけど
そっちの方が速いのかね?


88 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:22:25 ]
%sで文字列にして.までの数を数える。

89 名前:84 mailto:sage [2009/07/25(土) 18:24:11 ]
>>86
ありがとうございます。
それが一般的なのですね。

>>87
参考にさせていただきますが、
なりすましはご遠慮ください。

>>88
それもありですね。
ありがとうございます。

90 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:28:38 ]
>>86
それって一般的なのかね。

91 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:22:11 ]
>>86 は無いだろう
そんなコード書いてきたら突っ返す



92 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:01:41 ]
>>84
浮動小数点の指数部を取り出して0.3を掛ける。


93 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:27:25 ]
>>92
標準C++準拠だとして、それで行けるの?

94 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:13:22 ]
1000までの数で5a+7b+11c+13d+17e(aからeは0以上の整数)で表せる
全ての数のリストを求めるにはどうすれば良いですか


95 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:25:04 ]
LinuxでC++のプログラム開発するときって、
今は、どうするのが普通?

Eclipseとか使うものなのか?

俺が、大昔にやったときは、Emacs上で全てをシコシコ
してたが、時代は変わってない?

96 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:26:20 ]
>>94
深さ優先探索の考え方でできるよ

97 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:26:21 ]
>>83
現在は残念ながら一般的には無理。
ただし、デフォルト初期化で良ければ、Triange(): m_p() {}とは書ける。

>>93
std::frexpが使えると思う。

98 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:32:18 ]
>>94
表せない数が1 2 3 4 6 8 9だけじゃねーかw

99 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:42:21 ]
まじっすか
実際は問題がもっと複雑で、5,7,11,13,17が
数千個の合成数になります
ただ、考え方は一緒かと思って簡略化してしまったもので

とりあえず深さ優先探索で頑張ってみます


100 名前:83 mailto:sage [2009/07/25(土) 23:01:22 ]
>>97
int型の配列を初期化しているサンプルを見つけたので
似たようにして初期化できないか苦しんでました。デフォルト値では初期化できるんですね
とりあえず諦めます。ありがとうございました。

101 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:02:16 ]
数千個・・・って逆に表せない数字減るんじゃねーか?
一回表せた数字の整数倍は全部表せるから
幅優先でやって倍数をチェックしたほうが早くなると思う



102 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:02:29 ]
>>100
現行のC++では無理。
ごまかしで良ければboostで出来たと思う。

103 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:20:07 ]
#include <iostream>

class hoge {
private:
    struct fuga {
        fuga(int num[3], int v1, int v2, int v3) {num[0] = v1; num[1] = v2; num[2] = v3;}
    };

    fuga m_fuga;
    int m_num[3];

public:
    hoge(int v1, int v2, int v3) : m_fuga(m_num, v1, v2, v3) {
        std::cout << v1 << std::endl;
        std::cout << v2 << std::endl;
        std::cout << v3 << std::endl;
        };
};

int main(void) {
        hoge h(1, 2, 3);

        return 0;
}

なんか使うのが不安なコードだ・・・
コンストラクタ1回分無駄にするのを承知で素直に{}のなかで代入したほうがいいってことかな
つーか配列の数わかってて数も少ないならint num1, num2, num3;とかで十分だよね

104 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:45:48 ]
    struct fuga {
        fuga(int num[3], int v1, int v2, int v3) {num[0] = v1; num[1] = v2; num[2] = v3;}
    };

の num[3] はどこから拾ってきたのかしら

105 名前:94 mailto:sage [2009/07/25(土) 23:59:15 ]
やっと出来た
現時点でlimit=10000で50秒ぐらいかかるのでこれじゃ解けなさそう(しかもlimit周辺の値は若干不正確)
幅優先探索って、エラトステネスの篩みたいなやり方?

void solve(VI& v,set<int>& r,int limit){
VI tmp;
int m=*max_element(r.begin(),r.end());
int n=*min_element(v.begin(),v.end());
copy(r.begin(),r.end(),back_inserter(tmp));
for(int i=0;i<v.size();++i){
transform(tmp.begin(),tmp.end(),inserter(r,r.begin()),bind1st(plus<int>(),v[i]));
}
if(n+m<limit){solve(v,r,limit);}
}

//vは{5,7,11,13,17}
//rに結果が入る
solve(v,r,1000);

106 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:03:31 ]
追記:rの初期値も{5,7,11,13,17}

107 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 06:41:59 ]
>>95
プロジェクトによるけど、viとmakeでやってるところも普通にあるよ。
開発にEclipse使うばあいでも、Eclipseインストールしてなくても
ビルドできるようにしておくことが多い。

108 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:28:08 ]
>>94
なんか題意を正しく把握できてるか不安だが、こんなんでどうよ?

#include <stdio.h>

#define N 1000

char list[N+1];
int num[5] = {5,7,11,13,17};

void f(int n, int pos)
{
int i;

list[n] = 1;
for(i=pos; i<5; i++) {
int temp = n + num[i];
if(list[temp]) continue;
if(temp > N) return;
f(temp, i);
}}

int main(void)
{
int i;

f(0,0);

for(i=0; i<=N; i++) if(list[i]) printf("%d ", i);

return 0;
}

109 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:46:35 ]
>>108
>>99
数千個らしいよ

110 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:34:33 ]
なんでもかんでもクラス化するのって逆に害ですよね?
ビットフラグとかむき出しのほうがいいと思うんですけど

111 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:55:16 ]
>>110
確かに
> なんでもかんでもクラス化
は害になることもあるよ。

でも「なんでもかんでもクラス化すべきでない」っていう人の
大概は、「適切な対象でもクラス化できる技量がない」人だったりするんだよね。



112 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:11:44 ]
>>110 何でもかんでもクラス化するべきですよ。ビットフラグなんか特に。

113 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:36:50 ]
1次元で確保された配列を二次元とみなして使うとして
このとき配列Aの(x1, y1)から(x2, y2)のデータを配列Bの(X, X)から(X+(x2-x1), Y+(y2-y1))にコピーしたい時は
ループまわしてひとつひとつコピーするしかないでしょうか

114 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:51:27 ]
>>113
基本的にはそう。
環境によってはSIMD使って16byteまとめて転送
の様な高速化はできるけど。

115 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:25:52 ]
>>113
せめてX方向1ライン分くらいmemcpyしたら?

116 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:43:11 ]
>>113
x方向にデータが連続していると言う条件はつくけど、std::copyでも使えばいいんでない。
# cなら>115で。

117 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:50:18 ]
そうですね組み込み以外でもつかうんでstd::copyします
>>115,>>116どうもでした

118 名前:デフォルトの名無しさん [2009/07/27(月) 19:18:23 ]
C++
コンソールで、カーソルの位置を一行上に挙げたいのだが。
エスケープシーケンスは使えん。
使えるように設定できるのは知ってるが、別の方法で頼んだ。

119 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 19:21:34 ]
で、その結果は?

120 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:32:20 ]
shared_ptrって

(*p).hoge() と p->hoge();ってどっちがいいの?

121 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 21:01:46 ]
p->hoge();




122 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 21:46:51 ]
>>120
何のためにアロー演算子があると思っているのだ。
p->hoge()
が望ましい。

123 名前:助けて [2009/07/27(月) 22:16:07 ]
10進数から2進数に変える時、2進数を補数表現で表すプログラムを教えて下さい。

ドシロウトなんで、お願いします。

124 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:19:51 ]
>2進数を補数表現で表す
???????????????

125 名前:デフォルトの名無しさん [2009/07/27(月) 22:39:30 ]
>123

十進数 -10 を変換したとして
-1010 ではなく 1111111111110110 と表示したいのか?

126 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:49:21 ]
補数って、1の補数とか2の補数ってやつだよな。
もう忘れた。

127 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:53:44 ]
>>123
signed intなりsigned longに代入したあとに1ビットずつビット演算で取り出す

128 名前:助けて [2009/07/27(月) 22:54:36 ]
>125

はい。その通りです。

129 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:05:28 ]
class hoge {
private:
int *p;

public:
hoge(int x) : p(new int[x]) {}
~hoge() {delete [] p;}
void fuga() {・・・}
};

int main(void) {
try {
std::cin >> x;
hoge h(x);
}
catch(std::bad_alloc& e) {
std::cout << e.what() << std::endl;
}

h.fuga();

return 0;
}

↑スコープが外れちゃうからh.fuga()でコンパイルエラーになってしまう
自動変数に対してtry-catchする場合はtryスコープを伸ばすしかない?
保守性を考えて自動変数からスマートポインタに変えるのがいいのかな?

130 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:18:10 ]
>>128
#include <bitset>
#include <iostream>

using namespace std;

int main() {
const unsigned long value = 10;

bitset< 16 > b( value - 1 ), result;
result = ~b;
cout << result.to_string() << endl;
}

131 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:23:38 ]
>>129
君が try しているのは hoge オブジェクトじゃないのか?
それなのに、どうして try の外でそのオブジェクトを使おうとするのだ…。



132 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:41:46 ]
tryしたいのは生成だけなのに延々としたまでスコープを伸ばしたくないんです
tryスコープの中って処理重くなりそうだし、できるだけ短くしたほうがよかないですかね?

133 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:44:25 ]
catchは下のほうにまとまってたほうがよかないか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef