- 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/
- 12 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 20:58:15 ]
- つーか、大量にそういうの使うってことかね?
やり方自体を変えた方が良さそうだけど。
- 13 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:08:34 ]
- >>11
えっ?GET_SET_ACCESSORはメンバ変数へアクセス(set/get)するためのメンバ関数を作るマクロですけど?
- 14 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:10:42 ]
- だ か ら
>>13 カプセル化置いてけぼりのアクセサ書くなら もうオブジェクト指向やめれ。
- 15 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:13:27 ]
- >>13
カプセル化知らないん? カプセル化とは 【encapsulation】 - 意味/解説/説明/定義 : IT用語辞典 ttp://e-words.jp/w/E382ABE38397E382BBE383ABE58C96.html
- 16 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:14:20 ]
- 普通に考えたら、colorクラスのa,b,cとポイントクラスのx,y,zは
たまたま現在の実装がdoubleなだけで、意味するところは別物だから 同じにしようとは思わないと思うがなー
- 17 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:15:13 ]
- setで引数のチェックしたり、getで何か処理するならGET_SET_ACCESSORは使えないけど、
単純に代入、returnするだけならGET_SET_ACCESSORでいいんじゃないの?
- 18 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:18:47 ]
- >>17
>単純に代入、returnするだけ それがカプセル化置いてけぼりにしてるってことなんじゃ
- 19 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:22:19 ]
- >>17
頼むから、カプセル化のことも思い出してあげてください。
- 20 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:24:43 ]
- 単純に代入/returnするなら構造体でもいいけど
class使ったほうが利便性が良いならメンバ変数をprivateにしてアクセサを用意してあげれば良いんじゃないの? で、いちいちset〜、get〜書くのが面倒ならGET_SET_ACCESSOR使えばって話なんだけど? >>15 知ってるわ。
- 21 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:33:20 ]
- >>20
じゃあ重要性を知らないって事?
- 22 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:37:11 ]
- >>20
もう構造体とかクラスとか語る資格なさすぎる。 どこの言語使いだった人?
- 23 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:38:59 ]
- あんまりいじめるなよ。
- 24 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:39:54 ]
- >>22
C/C++/C#、Javaとか色々。カプセル化は情報隠滅も含むもんじゃないの? 本来は別々のものらしいけど、調べてもほぼ等価みたいな扱いしてるところ多いし。 たしか前スレでもそういうこと言ってたと思うけど。
- 25 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:39:57 ]
- エスペラント語一級です。
- 26 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:36:56 ]
- 隠滅はマズいんじゃね?
- 27 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:39:55 ]
- 隠蔽は良くないよ
- 28 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:42:07 ]
- なんだよ隠滅って隠滅はないわ。
○隠蔽 ×隠滅 だねorz
- 29 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:54:07 ]
- OS:XP
VisualStudio 2005 C++ バイナリファイルから文字列を抽出しようとしているのですがうまくいきません。 文字列は "amai_skin.dds" です。 直前にint型の文字数+null文字(14)が入っています。 抽出直前のブレークポイントでファイルポインタを覗くときちんとこの文字列が入っています。 int len; fread(&(len), sizeof(int), 1, fp); ↓パターン1 char* tests = 0; fgets(tests, len, fp); // 実行時エラー(Expression: (string!=NULL) || (cout==0)) ↓パターン2 char* tests = 0; fread(tests, len, 1, fp); // 実行時エラー(Expression: (buffer!=NULL)) ↓パターン3 string tests; fread(&(tests), len, 1, fp); // エラーは出ないが "n.dds" とだけしか格納されない
- 30 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:56:55 ]
- >>29
ファイル入出力以前の問題。 www.kouno.jp/home/c_faq/c6.html 6.2や6.8を参照のこと。
- 31 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:01:27 ]
- ↓パターン4
vector<char> tests; tests.resize(len); fread(&(tests[0]), len, 1, fp); で、無事取り出せました。多謝!
- 32 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:49:52 ]
- 文字を入れる領域が確保できてないよ。
× char* tests = 0; ○ char tests[256];
- 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 何でもかんでもクラス化するべきですよ。ビットフラグなんか特に。
|

|