1 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:15:45 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.70【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1258873470/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め) ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。
477 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:44:46 ] どんなコード?
478 名前:476 mailto:sage [2010/02/14(日) 16:48:30 ] >>477 こんなコードです DownloadManager *BrowserApplication::s_downloadManager = 0; HistoryManager *BrowserApplication::s_historyManager = 0; NetworkAccessManager *BrowserApplication::s_networkAccessManager = 0;
479 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:53:36 ] googleのコード検索で見たけど グローバル変数だね
480 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:57:51 ] prefix の s_ はstatic変数のsを表しているのかもしれない
481 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:58:43 ] >>478 staticのメンバ変数は、どっかに実体を宣言しないといけない。
482 名前:479 mailto:sage [2010/02/14(日) 17:01:50 ] そうだったw 479は間違い
483 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:04:26 ] boost::tuples or tuple の使い方が分かる日本語のサイトを教えてください。 名前空間が boost::tuplesなのかboost::tupleなのか、 色々混ざっているようなので ググっても謎です。 現行仕様のboost.タプルのの使い方が分かる日本語のサイトを教えてください。 よろしくお願い申し上げます。
484 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:05:53 ] アキラさんのboost本買うといいよ
485 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:18:10 ] テンプレート本?
486 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:41:35 ] >>483 boost.cppll.jp/HEAD/libs/tuple/doc/tuple_users_guide.html
487 名前:483 mailto:sage [2010/02/14(日) 17:49:05 ] >>486 お返事ありがとうございます。 拝読致します。
488 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:41:11 ] >>481 ありがとう
489 名前:デフォルトの名無しさん [2010/02/14(日) 19:06:37 ] C++なのですが 1行目 n個、2行目(n-1)個、・・・、n行目 1個の配列をつくるコードって これであっているのかどうかチェックしていただきたいのですが どうでしょう? --------------------------- int **a = new int*[N]; a[0] = new int[(int)(N * (N + 1) /2)]; int j = N; for(int i=1; i<N; i++){ a[i] = a[0] + i * (j-1); j--; } delete[] a[0]; delete[] a; ---------------------------
490 名前:デフォルトの名無しさん [2010/02/14(日) 19:10:50 ] CやC++を今から勉強したいんですけど、 全くの初心者ですがオススメの本ってありますか? 将来仕事にすることも考えてます。
491 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:14:57 ] >>490 独習シリーズ 本屋に行って、黄色い分厚い本を買って頭からケツまで20回嫁。
492 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:19:28 ] >>489 ありとあらゆる意味でダメ。 期待したとおりに動かないし、(直したとして)保守性も最悪。 窓からソースを投げ捨てるレベル。
493 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:20:11 ] ワロタw
494 名前:デフォルトの名無しさん [2010/02/14(日) 19:20:53 ] >>491 ありがとうございます 明日にでも買ってこようと思います
495 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:23:33 ] >>489 動くのかもしれんけどなんかおかしいような 普通はこんな感じじゃない? とかいって、普段vectorばっか使ってるから 初めてこういうコードを書いたわけだが int n=10; int **a=new int*[n]; for(int i=0;i<n;++i){ a[i]=new int[n-i]; for(int j=0;j<n-i;++j){a[i][j]=j;} } for(int i=0;i<n;++i){ for(int j=0;j<n-i;++j){ cout << a[i][j]; } cout << endl; } for(int i=0;i<n;++i) delete[] a[i]; delete[] a;
496 名前:デフォルトの名無しさん [2010/02/14(日) 20:15:00 ] >>495 ちなみにvectorだったらどんな感じになるんですか?
497 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 20:30:02 ] >>495 元のコードって、領域が配列を跨いで連続してる必要があるんじゃないの?
498 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 21:17:12 ] >>496 std::vector<int> a[N]; for (int i = 0; i < N; ++i) { a[i].resize(N - i); }
499 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 21:31:18 ] ポインタ配列は愚行でしょ struct C{size_t sz;int*p; C(size_t x):sz(x),p(new sz(int)){} C(size_t x,int*a):sz(x),p(a){}}; template<size_t N>struct L:C{ size_t am(size_t x){return x*N-((N+1)*N)/2;} L():C(am(N)){} C operator[](size_t x){return C(N-x+1,p+sz-am(x));}};
500 名前:デフォルトの名無しさん [2010/02/14(日) 21:37:35 ] >>497 そこが問題になるんですよね・・・ >>498 なるほど
501 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:41:14 ] 上でC99に準拠しているコンパイラが少ないって話が出ていたけど、 実際に試してみたら VC, gcc, bcc, dmc, OpenWatcom で全部ガン無視されててフイタwww むしろIntelの仕様がおかしいって言われそうで不憫だ。
502 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:45:10 ] gcc?
503 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:47:11 ] >>502 GNU C Compiler ですけど?
504 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:48:49 ] gnu compiler collection
505 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:53:13 ] gccじゃなくてg++じゃ、と>>502 は言いたかったに1ペリカね。
506 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:54:05 ] こまけぇことはいいんだよ
507 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:54:26 ] >>504 その略称のこともあるけど、GNU C Compilerの名前としてもgccは使われる。 >>502 お前人の揚げ足取ろうとする嫌な性格のやつなのね? そのくらい分かることだろ? さらに言えば今回の文脈ではg++じゃなくてgccが正しい。
508 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:56:51 ] gccで全然問題ない
509 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:05:20 ] >>502 がフルボッコw
510 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:06:32 ] 俺は502じゃないが、-std=c99つけてもあかんの あと関係ないけどGNU Compiler Collectionを指すときってGCCにするんじゃね
511 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:10:18 ] >>510 その略称のこともあるけど、GNU C Compilerの名前としてもgccは使われる。 さらに言えば今回の文脈ではg++じゃなくてgccが正しい。
512 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:11:56 ] >>510 > 俺は502じゃないが、-std=c99つけてもあかんの いやだれ一人としてダメなんて言ってないぞ?
513 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:12:37 ] >>499 大きな領域を一度に確保してからplacement newを発動するとか デストラクタが面倒臭い事になるけど
514 名前:507 mailto:sage [2010/02/14(日) 23:13:42 ] >>512 いや言ってるんじゃね?
515 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:13:48 ] GCCがC99ガン無視って事は無いな
516 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:14:45 ] どうみても>>499 は愚行だと思うんだが
517 名前:502 mailto:sage [2010/02/14(日) 23:19:43 ] 俺の疑問は>>510 の1行目が理由で>>515 なのではないかということ。 ok?
518 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:21:18 ] お前ら全員いい加減にしようぜ
519 名前:499 mailto:sage [2010/02/14(日) 23:21:22 ] うん。適当に打ち過ぎて矛盾やイミフメイな所がいっぱいあったんだ。気付いた処なおしたよ template<bool F=false>struct C{size_t sz;int*p; C(size_t x):sz(x),p(new int[sz]){} C(size_t x,int*a):sz(x),p(a){}}; typedef C<> E; template<size_t N>struct L:C{ size_t am(size_t x){return x*N-((N+1)*N)/2;} L():C<true>(am(N)){} E operator[](size_t x){return E(N-x+1,p+sz-am(x));}};
520 名前:483 mailto:sage [2010/02/14(日) 23:29:10 ] boost::tuple 勉強してきました。 感動しました。
521 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:30:29 ] > 広く使われている処理系でも、タプルのこの種の用途について > 最適化をしくじるものが存在する(例えば bcc 5.5.1) > ことに注意されたい。 Boostに名指しされとるww
522 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:32:42 ] まあ普通にstd::pairの拡張版だと捉えているがな
523 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:34:19 ] bcc 5.5.1は今から見るとひでぇからな。
524 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:35:47 ] 仕方ねえよ 標準C++にできるだけ準拠しようとして精一杯で 最適化まで手が回らなかったんだろ
525 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:49:33 ] >>519 何がしたいのかわからん。 new した領域はいつ delete されるの? なんで std::vector 使わないの?
526 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:52:14 ] テンプレートについて教えて下さい。 下記のようなテンプレートクラスを書いたところ コンパイルエラーになってしまいます。 template <class T> class TestClass { public: TestClass(){}; ~TestClass(){}; struct SS { int a; char b; long c; T d; }; SS * TestCode(void); }; template <class T> TestClass<T>::SS * TestClass<T>::TestCode(void) { return NULL; } gccでコンパイルすると、 error: expected constructor, destructor, or type conversion before '*' token error: expected `;' before '*' token となります。 どこが悪いのでしょうか。 教えて下さい。 宜しくお願いします。
527 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:57:10 ] >>526 typename
528 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:58:27 ] >>527 ありがとうございます。 何か追記する必要がありますでしょうか?
529 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:58:31 ] >>526 typename TestClass<T>::SS* TestClass<T>::TestCode(void)
530 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:59:46 ] >>529 ありがとうございます。 コンパイル通りました。 なぜ、先頭に typename と入れる必要があるのでしょうか? 教えて下さい。 宜しくお願いします。
531 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:01:57 ] >>530 ja.lmgtfy.com/?q=template+typename
532 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:05:55 ] >>531 ありがとうございました。
533 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:07:47 ] >>531 こんなサイトがあるんだw >これは、質問を自分で調べずに質問する人のために、Google検索の便利さを伝えるものです!
534 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:17:13 ] C++を勉強中の初心者です std::string Hoge(int Num) { std::string Data Data.clear(); 処理 return Data; } こういう関数があった場合Hoge関数の中で確保したstd::string Dataは C言語のころのmallocで確保された領域とどう違うのでしょうか? GCがあるような言語の場合参照が一定以下だと開放されるとかありますが C++はそういうのが無かったはずですし
535 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:22:07 ] Cでも構造体を返すことが出来るのは当然知ってるよな? で、当然、その構造体のメンバとして、 (mallocで確保した領域への)ポインタを持てることも知ってるよね?
536 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:24:17 ] >>534 mallocとか使って自分で管理するのと違って、クラスにその責任は任せてしまえる。 つまり、あんまり気にしなくていい。
537 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:24:26 ] >>535 はい std::stringで確保したデータが不要になった場合は clear()しておけば従来のfreeに相当する動作ということでいいんですかね?
538 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:34:49 ] ああ・・・いろいろ勘違いを・・・ テンプレートクラスということなので std::string* Data = new std::string(); stringの確保をこういう感じにしてこれを返せばいいんですね
539 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 08:06:25 ] >>538 ちがーう。 std::string をそのまま int か何かと思って同じように扱えばいい。
540 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:46:06 ] >>537 オブジェクト指向を根本的に勘違いしているな std::stringは一種のクラスであり、それ自体データとメンバ関数の 集まりとして完結しているものだ だから普通のPOD型の変数や構造体と同じように値返しが出来る 但しこれは当たり前だが、関数の中で定義したローカルstringを 参照返しするような事をすれば、これはstringに限らずどんなデータ型 だとしても未定義の動作となる
541 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:52:32 ] 回答側がバラバラすぎて、それぞれ何を主張してるのかよくわからん
542 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:53:01 ] >>538 C++初心者にオススメ。 ロベールの部屋 www7b.biglobe.ne.jp/~robe/ Codian www.kab-studio.biz/Programing/Codian/ 猫でもわかるプログラミング www.kumei.ne.jp/c_lang/ 少なくともこれぐらいは読んで 初めて質問が出来るレベルになるだろう と思います。
543 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:12:47 ] 素直にCから学べばよかったのに
544 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:14:20 ] Cから学ぶとC++の習得に余計な時間がかかるぜ
545 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:26:47 ] Javaだのを習得して、おかしな脳内回路ができるよりマシ
546 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:43:03 ] プログラミング経験皆無から始めるとして Cに3週、C++&STLに9週、テンプラ遊びの基礎に12週 これぐらいかかるかな
547 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:43:22 ] >>545 それはあるわ。Javaって結構綺麗な言語だから、 C++みたいな清濁併せ持ったカオスな言語だと 勉強がいやになってしまうんだよな。
548 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:46:21 ] >>546 あとたくさん本を買わなければならないよ C++について学べば学ぶほど、たくさんの本が必要になる 中には絶版になってしまったものもあって残念だが 俺は絶版扱いのC++標準ライブラリを一番多用している 手垢が付いてもう真っ黒だぞ
549 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:59:56 ] >>547 > Javaって結構綺麗な言語だから、 そうか? Javaも結局 謎の仕様を覚えなきゃならんことがあるし、 落ち目の感が否めない
550 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:02:30 ] >>549 謎仕様も多いけど、C++くんに言われとうないわ! まぁそうだな、綺麗だった、と言い直しとくわ。
551 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:11:28 ] 多くのプラットフォームで使えるC言語以上の 高級言語の内、 仕様が最も綺麗な言語って何だろう? 実際に役立つかとかはおいといて。 D言語かPython 3系(2系でなく)かな?
552 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:12:54 ] >>551 brainfuck とか whitespace とか
553 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:13:00 ] 後でできた言語の方が綺麗な構文になるのは仕方ないこと Javaはまあ綺麗になる前の踏み台みたいなポジションなのでしかたない しかしC#からC++に戻るとゲシュタルト崩壊?するわ C言語くらいまで戻るといろいろな面倒は自分で見ないといけないと 割り切ることができるけどC++のような中途半端だとスゲー悩む
554 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:17:12 ] ゲシュタルト崩壊 - Wikipedia ja.wikipedia.org/wiki/%E3%82%B2%E3%82%B7%E3%83%A5%E3%82%BF%E3%83%AB%E3%83%88%E5%B4%A9%E5%A3%8A
555 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 00:32:17 ] 教えて下さい。 テンプレートクラスから派生したクラスから、 基底クラスのメンバ関数をオーバーライド することは出来ないのでしょうか? なんどやってもエラーになってしまいます。 よろしくおねがいします。
556 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 00:35:27 ] codepadあたりにエラーになるコードを貼ってくれ
557 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 00:43:15 ] >>556 ありがとうございます。 template <class T> class A { public: A(){}; ~A(){}; struct S { long a; T b; }; S * TestFunc( S *p ); }; template <class T> typename A<T>::S * A<T>::TestFunc( S *p ){ return 0; } template <class T> class B : public A<T> { public: B(){}; ~B(){}; struct S : A<T>::S { double c; }; A<T>::S * TestFunc( A<T>::S *p ); }; template <class T> typename A<T>::S * B<T>::TestFunc( A<T>::S *p ){ return 1; } よろしくお願いします。
558 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 00:54:05 ] >>557 >>527- あと、ポインタ返す関数で return 1 は無いだろう。
559 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 01:10:51 ] >>558 ありがとうございます。 return 0; と return 1; を return p; に書き換えてコンパイルしてみました。 : error: expected `;' before '*' token : error: `typename A<T>::S*B<T>::TestFunc' is not a static member of `class B<T>' : error: template definition of non-template `typename A<T>::S*B<T>::TestFunc' : error: `p' was not declared in this scope : error: expected `;' before '{' token よろしくお願いします。
560 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 01:14:06 ] >>559 >>527- サルかお前は?
561 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 01:43:17 ] template <class T> class A { public: A(){}; ~A(){}; struct S { long a; T b; }; S* TestFunc( S *p ); }; template <class T> typename A<T>::S* A<T>::TestFunc( S* p ){ return 0; } template <class T> class B : public A<T> { public: B(){}; ~B(){}; struct S : A<T>::S { double c; }; S* TestFunc( S* p ); }; template <class T> typename B<T>::S* B<T>::TestFunc( S *p ){ return 0; }
562 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 01:01:13 ] >>561 ありがとうございました。
563 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 07:48:40 ] typename A<T>::S * TestFunc( typename A<T>::S *p );
564 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 10:43:57 ] テンプレートクラスを特殊化する場合 メンバ全てを宣言・実装し直さないといけないのでしょうか? それとも変更点のみで良いのでしょうか? あと、 template <typename T ,typename S = T> というデフォルト引数の設定は可能なのでしょうか?
565 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 11:03:13 ] >>564 クラステンプレートを特殊化したなら全部宣言しなおさないとダメでしょ。 クラステンプレートのメンバ関数ごとに特殊化できなかったっけ? > template <typename T ,typename S = T> やってみればいいじゃない。
566 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:25:55 ] デフォルトパラメータも使えたような気がしたが、こういうやり方もある template<class A, class B> class Base { --- }; template<class A, class B = hoge> struct DefType { typedef Base<A,B> type; }; { DefType<hoge>::type fuga; }
567 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 13:31:38 ] ごめん、間違えた template<class A> struct DefTypeA { typedef Base<A, nanika> type; };
568 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 14:04:17 ] テンプレート引数が異なるクラステンプレートの実体は関連が無いので、 同じクラステンプレートの異なる実体を継承することも出来る。 使いどころは限られるが。 template<typename T> class A { ... }; // デフォルト実装 template<> class A<int>: public A<...> // int以外を与えた場合のAを継承 { ... }; // 追加の実装
569 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 19:54:38 ] less を定義すれば greater とかも(特別な処理がない限り)自動で決まると思うのですが そういった処理(less がら greater を作製)をするテンプレートは標準であるのでしょうか? class CHoge { public: CHoge(int i, const std::string& str) : m_i(i), m_str(str){} int m_i; std::string m_str; struct Less { bool operator()(const CHoge& lh, const CHoge& rh) const { return lh.m_i < rh.m_i; } }; };
570 名前:569 mailto:sage [2010/02/17(水) 19:55:26 ] //こんなの template<typename T, typename FuncT> struct GeaterFromLess { bool operator()(const T& lh, const T& rh) const { return FuncT()(rh,lh); } }; std::vector<CHoge> vtHoge; vtHoge.push_back( CHoge( 4, "hoge" ) ); vtHoge.push_back( CHoge( 1, "foo" ) ); vtHoge.push_back( CHoge( 0, "bar" ) ); vtHoge.push_back( CHoge( 2, "alpha" ) ); vtHoge.push_back( CHoge( 3, "omega" ) ); vtHoge.push_back( CHoge( 1, "hotel" ) ); std::sort( vtHoge.begin(), vtHoge.end(), CHoge::Less() ); std::sort( vtHoge.begin(), vtHoge.end(), GeaterFromLess<CHoge,CHoge::Less>() ); // CHoge::Less() から Greator を作って逆順ソートしたい
571 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 20:31:44 ] >>569 標準ではなかった気がする 自分で作るかboost::operatorsだな
572 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:07:41 ] std::vector<class A> のpush_back() ってどんな動作してるんだ? たとえば vector<string> vec; vec.push_back("test"); ってやったら stringの何を呼び出してstringクラスに"test"を入れているんだ? 自作の文字列クラスをvecにつっこんで機能を使わせたいのです
573 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:13:46 ] コンストラクタ
574 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:44:09 ] STLを使うならEffectiveSTLには絶対に目を通しておけ
575 名前:572 mailto:sage [2010/02/18(木) 01:18:05 ] >>573 コンストラクタに(const char* )を追加して実行してみました. ttp://codepad.org/8ai16KPo どうやら大分ひどいことをしているようなんですが, コンパイルは通ってしまいます. ご指導をよろしくおねがいします. もしくは>>574 さんの勧める書籍を読めば何故こうなるのか理解出来るでしょうか?
576 名前:デフォルトの名無しさん [2010/02/18(木) 01:21:03 ] クロージャで出来て関数ポインタで出来ない例が思いつかない。
577 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 01:32:58 ] >>575 暗黙定義のコピーコンストラクタと代入演算子で浅いコピーになってる。 デストラクタを書くようなクラスではこの2つも必ず確認しなければいけない。