1 名前:デフォルトの名無しさん [2007/07/26(木) 00:33:07 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 テンプレその他 >>2-15 付近参照 前スレ class C++相談室lt;part56gt; pc11.2ch.net/test/read.cgi/tech/1170343752/l50
401 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:58:45 ] >>392 C#を実装するのに使います
402 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 12:37:18 ] >>401 が良い事言った
403 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:16:42 ] なぜ想像力がデスクトップとサーバー位にしか働かないんだ プログラムが必要な場面はいろいろあるぞ
404 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:39:47 ] class CFUNC a; の2次元配列を動的に確保する場面があって、 CFUNC ***pppa; として使いたいですが、 pppa = new CFUNC**[y_len]; でまずy要素を確保して pppa[0] = new CFUNC*[x_len]; 各y要素のx要素を確保して pppa[y][x] = new CFUNC(); で、各要素をインスタンス化して (*(pppa[y][x])).hoge(); みたいに使おうと思うのですが、このpppaを破棄する場合に deleteはどう書いたらいいのかわからなくなってしまいました。。。どなかたpppaをdeketeしてもらえませんか? ちなみによくしらないのですが、delete[]ってなんで配列の要素数がわかるんですか?
405 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:15:50 ] typedef CFUNC*** PPPCFUNC typedef CFUNC** PPCFUNC typedef CFUNC* PCFUNC と整理してやると PPPCFUNC pppa = new PPCFUNC[y_len] pppa[0] = new PCFUNC[x_len] pppa[y][x] = new CFUNC になるんで deleteとdelete[]で困る局面はなくなると思ってみたり 要素数は実装によるけどもコンパイル時には決められないからどっかで一元管理してんでないすか多分 俺はそうする
406 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:53:53 ] VC++では先頭の手前に要素数が格納されてた希ガス
407 名前:404 mailto:sage [2007/08/17(金) 22:59:04 ] なるほど、typedefを忘れてました。 ではこれで確保したpppaはdelete[] pppaで破棄できるんですねっ! 要素数は、 int pppa_len_y; int *pppa_len_x = new int[ pppa_len_y ]; でnew時に一緒に初期化しています。 もっと手軽な方法ありますか?
408 名前:404 mailto:sage [2007/08/17(金) 23:02:44 ] >406 それじゃぁmallocするときに、必要size+1とってfreeのときにそれ利用してるんですねぇ。 ってことは要素数を保持しなくても、ポインタの手前の要素数使えってこと? ちなみにc++の規定ですか?処理系依存ですか?
409 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:17:52 ] 処理系依存。
410 名前:404 mailto:sage [2007/08/18(土) 00:17:58 ] >>405 PPPCFUNC pppa = new PPCFUNC[y_len]; でnewしようとすると、PPFUNC*からPPPFUNCに変換できません と怒られてしまいました。 PPPCFUNC pppa = (PPPFUNC)( new PPCFUNC[y_len] ); でキャストして大丈夫なのでしょうか?
411 名前:404 mailto:sage [2007/08/18(土) 00:36:14 ] すいません、勘違いです。typedefミスってました。OTL
412 名前:383 mailto:sage [2007/08/18(土) 11:08:57 ] >>384-389 ありがとうございました。よくわかりました。 最近C++を勉強しているのですが、Java育ちのゆとり世代なものでスパルタさにガクブルものです。 class Foo { private: char* s_; public: Foo(char* str) : s_(new char[strlen(str)+1]) { strcpy(s_, str); } ~Foo() { delete[] s; } }; int main() { Foo a("foobar"); Foo b = a; } この程度で落ちるってのがすごすぎです(なぜ落ちるのかはちゃんとわかりますが・・・)。
413 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 11:24:18 ] >>412 生でnewを使うからそういう羽目になる。 std::stringを使うなり、std::vectorを使えばいい。 せめて、スマートポインタを使え。
414 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 11:34:02 ] コピーコンストラクタや代入演算子をちゃんと書かないから・・
415 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:19:01 ] C++を使う時は、リソースの所有権を常に意識する必要がありますな。 RAIIはちゃんと勉強しといたほうが良いよ
416 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:37:37 ] そうだな、コピーコンストラクタと代入演算子は常に書くべき。
417 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:40:35 ] Java→C++とか死亡ルートじゃね? Java→C→C++って回るべきだと思うんだが
418 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 13:32:09 ] GC付きC++って選択肢もあるんでないの(w
419 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 14:17:34 ] Javaなんか使うから頭が馬鹿になるんだよ。 GC付きの言語を使うと変な癖が付く。
420 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 15:08:22 ] 時代に逆行している人
421 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:59:23 ] >>417 自分はC#→C→Java→C++ってやってきたけどおk?
422 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:03:18 ] コンストラクタで例外を投げるクラスがあり、 そのクラスをstaticに使ってるんですが、 この場合、どのように例外をキャッチすればいいのでしょうか? class Throw{ public: Throw(){ throw 1; } }; class TestClass{ static Throw throw; }; こんな感じです。
423 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:12:19 ] >>422 コンストラクタの中でキャッチするか、プログラムが死ぬか。
424 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:36:05 ] >422 staticをやめる
425 名前:デフォルトの名無しさん [2007/08/19(日) 13:25:57 ] 教えてください。 たとえば int i = 100, *ip; double d = 123.456, *dp; ip = &i; dp = &d; char *s = "abcdefg"; cout << ip << " " << dp << " " << s << endl; このようなコードで int型やダブル型のポインタを cout で出力すると アドレスが表示されるのに char型のポインタだと 文字列が表示されるのがいまいちよくわからなかったんですが ずっと勉強してきてふと思ったんです。 cout で演算子オーバーロードでそうなるようにされてるのかなと。 で定義されているコードを探そうと思ったんですけど なんかごちゃごちゃしててよくわかりません。 もし予想が当たってるならどのファイル見ればいいかでしょうか?
426 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 13:54:49 ] >>425 basic_ostream っていうクラステンプレートに対して定義されている。 char もテンプレート引数になってるからちょっと探しにくいだろうね。 ヘッダ ostream に対応するファイルで定義されているはず。 ごちゃごちゃしたヘッダを読むのがいやなら >>2 から規格のドラフトでも見るといい。
427 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 17:00:46 ] 教えてください。
428 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 17:31:07 ] 何をだ
429 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:41:48 ] >>428 事故解決すますた
430 名前:デフォルトの名無しさん [2007/08/19(日) 21:20:33 ] >>426 ありがとうございます。 ファイル見てみたんですけど 今の僕にはまだ難しくてよくわかんないんで規格もみたんですけど いまいちわからなくて 検索してたら説明されてるページをみつけました。 www.io.nara-su.ac.jp/kanrishitsu/manual/FSUNf90/LANG/japanese/C++/stdlib/stdref/bas_8583.htm これですっきりしました。
431 名前:デフォルトの名無しさん [2007/08/20(月) 15:44:57 ] 質問です。 下のクラス図のようなクラスを実装したいのですが、DataClassのように、二つ(以上)で共有しているクラスは、コード上でどのように書いたらいいのでしょう? DataClassのインスタンスをグローバルな領域で作るしかないのでしょうか? クラス図 enjoi.blogdns.net/up/src/868.jpg とりあえず書いてみたコード class DataClass{ private: int data; public: void setData(int newData); int getData(); }; class ClassB { public: bool DoSomething(); }; class ClassA { private: ClassB classb; };
432 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:18:28 ] 状況次第じゃね。 どっちかに持たせて、もう片方にも渡せるようにすることもあるし、 動的に確保して、A, B の両方のスマートポインタに入れとくこともあるし、 A を所有するクラスに持たせて、そっから渡すようにすることもあるし、 シングルトンにしてグローバルな領域に置くこともあるし、
433 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:18:28 ] そんなに文句あるんならnamespace使うなりClassAとClassBを統合するなりすれば?
434 名前:デフォルトの名無しさん [2007/08/20(月) 16:20:59 ] 初心者だからよくわかんないんですけど DataClass をメンバとして持つんですか? ClassA と DataClass の関係って必要なんですか? ClassB経由で十分なんじゃないでしょうか?
435 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:23:07 ] 関連のあるABのオブジェクトが同じDataClassオブジェクトと関連を持つかどうかは示されていない。 むしろ同じオブジェクトではないと考えるほうが自然。
436 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:28:10 ] A, B, DataClassを保持する親クラスParentを作っておいて、A, Bのインスタンス生成時にParentへのポインタを渡し、 各インスタンスはParentへのポインタを通してDataClassへとアクセスする。
437 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:30:25 ] B に入れといて、B を通して操作する。
438 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:35:13 ] 多重継承はやめとけ。実世界でも親の種が違う生き物は短命だ。
439 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:36:43 ] どこに多重継承が出てくるんだ?
440 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 16:59:47 ] あの矢印は関連。サブクラスは白抜き三角矢印。
441 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 17:56:47 ] たくさんのご回答ありがとうございました。 複数の方法論に、そもそも設計の段階でご意見まで、たくさんいただきまして、ありがとうございます。 少し数があるので、それぞれについて吟味して、決めた際にまた改めてのお礼がてらご報告にきたいと思います。 ありがとうございました。
442 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:33:29 ] >改めてのお礼がてらご報告にきたいと思います。 しなくていいよ。
443 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:48:57 ] stringstring を途中で空にすることはできるでしょうか?
444 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:56:17 ] std::stringstream?
445 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:27:07 ] なんだこのバグは support.microsoft.com/kb/326616/ja >>443 stringstream.str("");
446 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:00:38 ] >>445 鬱になった やはりSTLportを入れて使(ry
447 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:10:08 ] std::coutで、時々アドレスのような文字列("0xABCDEF12"みたいな)が出力されたり、 std::wcoutで何も出力されなかったりして困ってたんだけど、445が原因? でもVS2005 Proだから違うか
448 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:34:28 ] >>447 coutにwchar_t*食らわしたり、localeを適切に設定せずに日本語文字列食わしてるならお前が悪いだけ。
449 名前:印字ケータ [2007/08/23(木) 14:31:20 ] バイナリエディタでファイルを開くと 保存してある漢字の"日"という文字は16進数で93 FAと表示されてますが、 コレを読込んで、配列に入れると-109と-6となります。 16進数で表示させたいので、変換する方法を教えてください。 お願いします。
450 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:35:18 ] unsignedにキャストすればいいんじゃね。
451 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:40:35 ] 93 FA を2進数であらわすと 1001 0011 1111 1010 10010011 を符号付き10進数であらわすと -109 11111010 を符号付き10進数であらわすと 00000110 -6 そのまま16進にすれば同じ 気にしないで突き進め char を intにするなら符号拡張がおきるので>>450 のとおりunsigned にしとけばいい
452 名前:印字ケータ [2007/08/23(木) 14:42:15 ] >>450 返答ありがとうございます。 早速やってみましたが、変換後に4294967187というデカイ数値になりました。 ちなみに、unsignedの変数にキャストして代入してみました。 もしかして私のやり方が間違ってますか。
453 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:54:41 ] 4294967187 ってのは16進に直すと ffffff93 93 はマイナスだから、そのままint にもってくと 符号拡張するんだよ unsigned にキャストってどこでどうやったの? unsigned な変数に入れてやってみ。
454 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:56:17 ] 符号拡張されてるんだろう 10010011→11111111111111111111111110010011
455 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 15:04:05 ] char ch = 93; int n = (unsigned char)ch;
456 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 18:34:31 ] >>445 Dinkum版stringの短文字列最適化がアダになったな。 実装としては面白くて好きなんだがな。
457 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:36:57 ] 2005SP1で直ってるっぽいが
458 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 08:15:51 ] vector< struct X > Func_A(); vectorとかコレクションを返す関数って効率悪い?
459 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 08:30:10 ] >>458 コンテナを参照で受け取ったほうがいいんじゃないか?
460 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 08:44:11 ] そこでRVOに期待、右辺値参照にもっと期待。
461 名前:sage [2007/08/30(木) 10:25:41 ] >>459 参照で受け取るっていうのは void Func_A( vector< struct X >& ); か、 vector< struct X >& Func_A(); ってことですか? とりあえず上の参照を引数にする方でやってみます
462 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 11:47:47 ] vector< struct X >& Func_A(); はどっかに所有者用意しなきゃいけないから色々と面倒じゃね? 基本はauto_ptr戻しだと思うけど。
463 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:55:27 ] いや、たぶん void Func_A(std::vector<struct X>& arg) のことだろう。 仕様と実装を混同するのはよくないが、実際には多くのコンパイラにおいて 「構造体(class)を返す関数」は、暗黙の引数(返り値へのポインタ)を受け取って、 そこに書き込んで返しているわけだから。 で、return直前にインスタンスを生成する以外の場合、つまり ローカル変数としてvectorを宣言していろいろ操作しそれを返す場合 おそらくRVOされる可能性も低いんじゃないね。知らないけど。
464 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:49:22 ] >>463 よくある戻り値用のポインタが指しているのは確保されただけで まだコンストラクタが走ってない領域ね。引数で受け取る場合は 必ず構築済みのインスタンスを指すんで、仕様的にも違いがある。 最後の場合は「可能性が低い」じゃなくて RVO は不可能。
465 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:52:15 ] >>464 Named RVOはVC8がやってるらしいですぜ msdn2.microsoft.com/en-us/library/ms364057 (vs.80).aspx
466 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:55:03 ] ずっと前の gcc に付いてたのに削除されたな。あれは仕様的に 何か問題があったんだろうか?
467 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:09:49 ] gcc.gnu.org/gcc-3.1/changes.html コンパイラが勝手にやるようになったから文法からは削除されただけみたい。
468 名前:464 mailto:sage [2007/08/31(金) 01:23:50 ] いろんな変数返されたとき困るじゃん、とか思ってたけど、そうじゃないときには 働くのね。ふーん。
469 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:35:07 ] 引数が同じで戻り値が違う型の関数を定義する方法って知らないですか? できればクラスのメンバ関数でやりたいです まえにWebで見かけたんだけど見つからなかったorz
470 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:48:21 ] >>469 引数の型が同じなら関数を呼び分けることができないから、基本的に無理だろう。 戻り値の型を基底クラスのポインタにして、異なる型の派生クラスのオブジェクトの ポインタを返すとかじゃダメ?
471 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 03:13:32 ] >>469 こんな感じ? struct A { template <typename T> T foo(int); }; void bar() { A a; char c = a.foo<char>(0); short s = a.foo<short>(1); // ... }
472 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:55:28 ] 浮動小数点の小数点以下を簡単に取る方法ってないですか?
473 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:13:39 ] f - floor(f)
474 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 16:14:22 ] >>472 modf >>473 は負数のとき正しくない
475 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:35:42 ] f = f - (float)((int)f); とかじゃ駄目?
476 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:59:33 ] f > -1 ? f - floor(f) : aaaaaaaaa
477 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:19:41 ] >>475 もともと整数部分がint範囲を超えてる場合があるので、 intにキャストするのはまずいと思われ。
478 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:01:01 ] まさにそのための trunc (truncf) という関数があるんだが、 調べてみたらこれは C99 で定義されてるらしいから C++ では普通使えないな とはいえ持ってる処理系に存在するかどうかは調べてみたらどうよ
479 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:31:14 ] unsigned longにキャストは駄目なのか
480 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:05:17 ] fmod(f, 1.0)
481 名前:469 mailto:sage [2007/09/01(土) 00:26:15 ] >>470 ,471 レスdクスです、 自分が見てたのは、こんなのでした 素直に名前を変えます... struct testFunc { int n, m; testFunc(int _n, int _m = 1) { n = _n; m = _m; } testFunc(int _n, double _m) { n = _n; m = 10; } operator int() { return n * m * 2; }; operator double() { return n * m * 3.0; }; }; void main() { int a = testFunc(5); double b = testFunc(5); int c = testFunc(5, 5); double d = testFunc(5, 5); int e = testFunc(5, 5.0); double f = testFunc(5, 5.0); } もう少し探したらそれらしいのが見つかりました ttp://homepage2.nifty.com/well/FunnyStorage.html#mutate やりたかったことはこんな感じ↓ ttp://anond.hatelabo.jp/20070722050021
482 名前:デフォルトの名無しさん [2007/09/02(日) 00:02:07 ] vector<char> v; for (int i=0; i<v.size(); i++) { ..... } というコードの i<v.size() で > warning C4018: '<' : signed と unsigned の数値を比較しようとしました。 という警告が出るんですが、 こういうときは unsigned i=0 にして きっちり警告を消してしまうもんなんでしょうか?
483 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:07:42 ] うん 警告も消すのが良い作法
484 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:11:18 ] >>482 unsigned でも警告は消えるけど、v.size()のリターン値と同じ型を使うのが普通。
485 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:12:08 ] これが規格厨を黙らせる、完璧に正しい方法。 for ( vector<char>::size_type i = 0 ; i < v.size() ; ++i )
486 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:16:44 ] そこでautoとか未来を先走るわけですよ。カモンC++0x
487 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:23:34 ] >>486 でもこの場合どうやるんだろう。 そもそも>>482 はstd名前空間のvectorではないから、自前実装の俺様vectorである可能性もあるんだよね。 ひょっとしたら、size_typeなど定義されていないかもしれない。 こういうことできるの? decltype( v.size() ) i ; sizeofに関数を渡すと、戻り値の型のサイズになるから、 decltypeだと戻り値の型になってくれるんだろうか。 なんてことをふと考えてしまった。 どうなるの? 教えてハゲな人。
488 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:27:02 ] さすがにバカ過ぎるだろ
489 名前:486 mailto:sage [2007/09/02(日) 00:30:15 ] すまん、脳内フィルターで485のループがイテレータに見えていた。 for (auto i = v.begin(); i != v.end(); ++i)
490 名前:デフォルトの名無しさん [2007/09/02(日) 00:40:25 ] >>483-489 なるほど。さんくすです。 >> 484 やっぱりそうですよね。 安易に型決めるんじゃなくてちゃんと考えるべき何ですよね。 >> 485 感動しました。
491 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:34:22 ] 何でイテレータ使わないの? >482 i++使う意味も判らん……
492 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:50:17 ] 482じゃないが、iの値自体が処理に絡む場合はイテレータ使えんだろ for (int i = 0; i < v.size(); i++) v[i] = i; みたいな。
493 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:59:53 ] >>491 初心者だからだろ。 そのくらいわかれよ。
494 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 08:40:18 ] >>487 できるよ。
495 名前:デフォルトの名無しさん [2007/09/02(日) 12:06:53 ] >>491 そうですね。イテレータでもいけそうですね。 今はサンプルプログラム打ちながら勉強してるんで そこまでは思いつきませんでした。 >>492 ブロック内部でローカル変数作れば解決できそうですね。 またひとつ勉強になりました。 ありがとうございます。
496 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:35:18 ] >>495 そうそう、ループはイテレータで書くのが癖になると、内部でint idx = it - vec.begin()みたいなのを書くのも癖になる。
497 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:47:29 ] C++に限ったことではないですけど、Map型とList型って似て非なる物だといいますけど、いざって時にList→MapにしたりMap→Listにしたりする時は どうすればよいのでしょう。効率的に考えて
498 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:50:09 ] どういう変換をしたいのかサパーリ 似て非なるっていうか、ListとMapは別物じゃ?
499 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:55:44 ] >>498 変換というか、Map型を継承しているクラスがList型で取り出せたりその逆も・・・出来る感じの事。 説明下手ですまそ。
500 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:57:46 ] std::map<a,b> を std::list< std::pair<a,b> >にコピーする話なら、 std::copy(map.begin(), map.end(), std::back_inserter( list ) ) でいけるんじゃね?効率なら知らん。
501 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 14:26:23 ] list.assign(map.begin(), map.end()) だろ。