1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.63【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1231499251/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
477 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:46:00 ] 念のため書くけど、省略時にどの値を採用するかはその関数を書いた人が決めるのよ。 さっきのIfstream::binaryも同じ
478 名前:デフォルトの名無しさん [2009/03/23(月) 12:35:15 ] >>477 本当ですね。 VC9++で試したら、ゼロじゃなかったです。 どういう値になっているのか調べられなかったけど、 ちゃんと読めてなかったです。
479 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:50:29 ] ああそうか、binary modeとcooked modeはCP/M、ひいてはMS-DOSの ためにC言語時代から受け継いでいる伝統だったな unix系は意識不要
480 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 14:42:51 ] おまえFTPとか知らないだろ
481 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 14:54:43 ] File Transfer Proturk がどうかなさいましたか?
482 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:09:04 ] TDateTime now = Date(); String hiduke=DateTimeToStr(now); SaveDialog1->FileName=hiduke; 日付をFileNameのところに表示したいのですが、上記のようにやっても うまくいきません原因の分かる方教えてくださいー。
483 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:39:00 ] 482です 解決しました 2009/03/23の /がダメだったようです。
484 名前:デフォルトの名無しさん [2009/03/23(月) 22:00:05 ] free(array); すると、プログラムが止まってしまいます。 メモリは確保しているし、なぜfreeするとエラーになるかわからないです メモリのエラーはerrorno でチェックしろとかいてあったのですが どうやってチェックすればいいかサンプルコードをください
485 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:07:14 ] エスパーさんたのみます!
486 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:13:31 ] 間違えたアドレスを開放しようとしてる
487 名前:高橋 [2009/03/23(月) 22:15:23 ] >>485 情報がこれだけじゃ、いかに魔美くんでも無理だよ。
488 名前:Cの達人 mailto:sage [2009/03/23(月) 22:27:56 ] Cの達人と申します。 ネイティブCのことなら、お任せください。 by Cの達人
489 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:29:38 ] www.kouno.jp/home/c_faq/c7.html#19
490 名前:デフォルトの名無しさん [2009/03/23(月) 22:35:46 ] TCPで他のマシンから要求を受け付けるサーバーを書いてるのですが、過去の一定の時間内(例えば1時間)で処理した 要求の上限を設定(例えば100個まで)して、それ以上は処理しない(要求を受け付けるだけ)ようにしたいと思ってます。 そこで、受け付けた全要求の{受け付けた時間、処理が終わった時間}という構造体を作って、それをダブルリンク リストにつないで置くようにしました。新しい要求が来たらそのダブルリンクを回って、処理が終わってから1時間 たってないものの数をカウントして、処理する/しないを決めます。 ところがこれだと要求の数が増えると(10万件とか50万件とか)、どんどん重くなるのですが、何か良い方法はない でしょうか?こういう処理って結構色々な場面で使われると思うのですが。 よろしくお願いします。
491 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:38:48 ] 10万とかのオーダーになったら、DB 使うことを考えちゃうな。
492 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:43:43 ] >>490 deque を使ってみるといいよ 新しい要求がきたときに 1.一番古い [0] の時刻が1時間より前だったら pop_front で削除 2.1.で削除が行われた場合1.に戻る 3.deque のサイズが 100 未満であれば要求を受け付ける 4.deque に push_back で追加 最近同じような質問があった気がする
493 名前:デフォルトの名無しさん [2009/03/23(月) 22:50:42 ] >>491 DB使ったほうがいいですかね。 出来るだけ軽い処理で実装しろと言われてて、自分はCで実装してるのですが、、、 上限を過ぎた要求は拒否しちゃえばいいのかな、、。でも拒否された方にいつ リトライすればいいか教えるのも面倒だし。一応、受け付けた要求の数があまり 多くなりすぎた時には拒否できるようなオプションも付けようかとは思ってます。 リトライのタイミングは相手まかせです。 ありがとうございます。
494 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:56:09 ] C++には便利な仕組みがいっぱいあるよねー。
495 名前:デフォルトの名無しさん [2009/03/23(月) 22:57:02 ] >>492 ありがとうございます。 dequeも考えたのですが、処理中の要求がどういう順序で終わるかは決まってないので (重い要求の少し後に軽いのが来た場合、後から来た軽いのが先に処理が終わる可能性があります) dequeは使えないか、と思ったんですが、どうですか? >最近同じような質問があった気がする ありがとうございます。探してみます。
496 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:23 ] 処理中のものは一時的に別のmapとかに保存しておいて、処理が終了したらlistに積むとか
497 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:26 ] 処理の軽さがあらかじめわかるなら あの、あれ、なんていったっけ、常にソートされるコンテナ、 それ。
498 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:21:09 ] 時刻をキーにしてstd::set使えばよさげだね 重さ?シラネ
499 名前:デフォルトの名無しさん [2009/03/23(月) 23:35:58 ] どうも自分の環境だと、30万件を越えたあたりからマシンが応答なくなります。 30万件のダブルリンクを、全然内容に変化がないのに1秒とかの間に何度も何度も 回ってて、何度も何度も処理後1時間以内のエントリの数を数えてます。 この処理を減らせれば、もっといけそうな気がする。 メモリ消費自体は、構造体が16バイトなので、100万件でも16MBとかの消費のはず なんですがね、、、
500 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:41:11 ] それは「新しい要求が1秒とかの間に何度も何度も」来てるからじゃろ? そして「受け付けた全要求」、つまりここでは30万件を 要求が来るたびに「回って、処理が終わってから1時間たってないものの数をカウントして」る からじゃろ? 仕様どおりじゃないのかな?
501 名前:デフォルトの名無しさん [2009/03/23(月) 23:48:29 ] >>500 そうですね。 負荷テストやっとこうと思って、別プロセスからガンガン要求なげてみたんです。 1秒間に10000件とかです。負荷が高いときは要求を拒否しますといったほうがいいんですかね。 そうなると、要求を出す側のプログラムも変更しなくちゃいけないのがいやなんですけどね。。
502 名前:デフォルトの名無しさん [2009/03/23(月) 23:52:40 ] >>497-498 ありがとうございます。 でもC++は手元のコンパイラが対応してなくてですね、、強く要求すれば購入してもらえるかも しれないんですが、なんとかCでやりたいと思ってます。 自分でstd::setとかコンテナとか実装すればいいのかもしれないですが、 常にソートされるコンテナって重そうな感じがするし、、、、
503 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:53:31 ] 全体的に仕様がおかしい気がするけど そういう仕様なら仕方ないのであきらめましょう。 プログラマは仕様について意見することはできても 仕様を変える力はありません。しようがないのです。なんちて・・・ コマネチ!
504 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:08:07 ] >>501 それは仕事でやってるの?
505 名前:デフォルトの名無しさん [2009/03/24(火) 00:11:58 ] >>501 そうです。でも売り物じゃなくて、社内のデータ管理ソフト用の処理を書かされてます。
506 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:22:25 ] すげー社内システムだな。
507 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:27:16 ] >>492 の方法なら一番軽いと思うんだけどな。処理が終了してからlistとかdequeに積めばいいだけだし。 全探索の力業を少しでも軽くしたいなら要求が来るたびに調べるんじゃなくて、少しの誤差を許容して 調べるのは一秒に1回までとすれば1/10000まで軽くなると思う。
508 名前:デフォルトの名無しさん [2009/03/24(火) 00:30:19 ] 結構大きな会社で、ストレージ管理ソフトも自社製のがあるんですが、 そういうのは管理できる人を手配するのが大変らしいです、、、
509 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:30:50 ] STLは偉大だなぁ。ちゃんと処理時間についても言及されてる。
510 名前:デフォルトの名無しさん [2009/03/24(火) 00:40:32 ] >>507 そうですね。 じゃあ、ダブルリンクには処理が終了してないものを入れておくことにして、終了したものは dequeで管理する、そしてダブルリンクの全探索は1秒に1回にしてやります。 過去1時間以内に処理した要求の数は、ダブルリンク上の処理中のものの数+deque上のもの。 これで実装してみます。 明日の朝までにできるかな。
511 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:41:40 ] STLは元々Adaに組み込もうと研究されてたようですね C++にtemplate機能が付け加えられたのに目を付けた Stephanov(だっけ)がC++に移植したのが初めだとか
512 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:02:35 ] template に関してだけど、オーバーロードにするか、templateを書くかといつも 使いどころに迷ってしまう、皆さんはどういう基準で使い分けていますか?
513 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:23:59 ] オーバーロードで済むならオーバーロード。 テンプレートが必要な時だけテンプレート。
514 名前:デフォルトの名無しさん [2009/03/24(火) 08:09:13 ] 時間がないとき以外は全部テンプレート。自分が成長するため。
515 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:30:05 ] 演算子のオーバーロードについて質問があります。STLのIteratorみたいに、 List<int> *list = new List<int>(); llist.push_back(1); llist.push_back(2); for(Iterator* iter = (ListIterator<int>*)list->iterator(); iter->hasNext(); iter++){ printf("%d ", (*iter)); } このような書き方ができるようにソースコードを書きたいのですがうまくいきません。 以下が(全部載せるには少し長いので)自分のソースの抜粋です。 class Iterator{ public: //省略 virtual bool hasNext() = 0; virtual Iterator<Type> &next() = 0; virtual Iterator<Type> &operator++() = 0; virtual Type& operator*() = 0; }; template <class Type> class ListIterator : Iterator<Type>{ public: //省略 Iterator<Type>& operator++ (int dummy){ return next();: } Type& operator*(){ return value;//現在イテレータが指しているセルの内容 } } このように定義したものを上のように実行すると、4227856のような数字が連続して表示されてしまいます。また、for文のところで実行時エラーが出ます。 どう書き直せばよいでしょうか……。 (素直にSTL使えって話なんですがね……OTL)
516 名前:デフォルトの名無しさん [2009/03/24(火) 08:41:56 ] >>515 よく1回のカキコにおさめたな。
517 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:48:26 ] >>516 載せるところ選ぶのに苦労しました……。 重要そうなところだけ抜粋してます。 テンプレートクラスのListは自前で教科書読みながら基本的な機能は実装してみました。 こんなことしてるのは、単に興味とステップアップのためなんですが。 ちなみに学生ではありますが、ただの(へたれ)日曜?プログラマです。 サンプルコードまねるだけでろくなソフトも作れませんが……OTL (っとこんなことはどうでもいいですよね……)
518 名前:デフォルトの名無しさん [2009/03/24(火) 10:05:31 ] あるサイトを参考にして、下記のような半角全角変換関数を 作成したのですが、試しに適当にint型の変数を入れて 動かそうとすると下記のようなエラーが出ます。 参考サイトにあるものをほぼそのまま使用しており、 修正したところはcase文の中の変換する文字のみです。 参考サイトには、そのまま使用できるようなことが 書いてあったのですが、何が間違っているのか教えてください。
519 名前:デフォルトの名無しさん [2009/03/24(火) 10:06:52 ] int han2zen(char *str) { char *buf, *p, *ptr; buf=(char *)calloc(strlen(str)*2+1,sizeof(char)); for(ptr=str,p=buf; *ptr!='0\'; *ptr++){ switch((int)*ptr){ case '0': strcpy(p,"0");p+=2;break; case '1': strcpy(p,"1");p+=2;break; case '2': strcpy(p,"2");p+=2;break; case '3': strcpy(p,"3");p+=2;break; case '4': strcpy(p,"4");p+=2;break; case '5': strcpy(p,"5");p+=2;break; case '6': strcpy(p,"6");p+=2;break; case '7': strcpy(p,"7");p+=2;break; case '8': strcpy(p,"8");p+=2;break; case '9': strcpy(p,"9");p+=2;break; case default: *p=*ptr; p++; *p='\0'; break; } } strcpy(str,buf); free(buf); return(0);
520 名前:デフォルトの名無しさん [2009/03/24(火) 10:07:57 ] (1849) : error C2001: 定数が 2 行目に続いています。 (1849) : error C2015: 定数の文字数が多すぎます。 (1850) : error C2143: 構文エラー : ';' が 'switch' の前にありません。 (1850) : error C2143: 構文エラー : ')' が 'switch' の前にありません。 (1861) : error C2059: 構文エラー : 'default' (1868) : error C2040: 'strcpy' : 'int ()' は 'char *(char *,const char *)' と間接操作のレベルが異なります。 (1869) : error C2371: 'free' : 再定義されています。異なる基本型です。 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\\include\malloc.h(123) : 'free' の宣言を確認してください。 (1871) : error C2059: 構文エラー : 'return' (1872) : error C2059: 構文エラー : '}'
521 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:10:37 ] >>515 printf("%d ", (**iter)); 正直混乱するのでiteratorで多態はやめた方がいいんじゃない? Listの実装でListIteratorを返すようにして for(ListIterator iter = list->iterator(); iter->hasNext(); iter++){ printf("%d ", (*iter)); }
522 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 11:12:35 ] >>519 '0\' '\0' case default: default;
523 名前:515 mailto:sage [2009/03/24(火) 12:20:00 ] >>521 レスありがとうございます。 >printf("%d ", (**iter) なんでうまくいかないんだろうと4時間くらい混乱してました。 List::iterator()でnewしてポインタを返す仕様でした……(もちろん管理してdeleteもする)。 とりあえず一つ前のソースコードは(**iter)で動きました! どうもです。 ポインタ渡してるんだから*が一個多く必要なのは当然。初歩的なミスだったとは恥ずかしい。 初めて演算子のオーバーロードなんてやるからそれが間違ってるのかと思い込んでました。 List::iterator()は、 ListIterator<Type> iterator(){ return ListIterator<Type>(this); } 現在のソースコードはポインタじゃなくてこんな感じにしてみました。 >多態はやめたほうが…… Iteratorクラスを作って継承するのはやめる方向で書き直してみます。どうせ自分しか使わないですし。 アドバイスありがとうございました。 スレ汚し失礼しました。
524 名前:デフォルトの名無しさん [2009/03/24(火) 13:59:10 ] 518,519,520です。 ありがとうございます。 おかげで動くようにはなったのですが、 期待する値を得ることができません。 下記のような値が返ってきてしまいます。 何がいけないんでしょうか? INPUT OUTPUT HAN2ZEN("9") NULL HAN2ZEN("99") 結果なし HAN2ZEN("999") 9 HAN2ZEN("9999") 結果なし HAN2ZEN("99999") 9 HAN2ZEN("999999") 99 HAN2ZEN("9999999") 999 HAN2ZEN("99999999") 99 HAN2ZEN("999999999") 999 HAN2ZEN("9999999999") 9999
525 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 14:24:58 ] >>524 int main() { char s[100]; for (int i = 1; i <= 10; i++) { s[0] = '\0'; for (int j = 0; j < i; j++) { strcat(s, "9"); } printf("HAN2ZEN(\"%s\")", s); han2zen(s); printf("%s\n", s); } return 0; } これでちゃんと出たけどな?
526 名前:デフォルトの名無しさん [2009/03/24(火) 14:43:54 ] ありがとうございました。han2zen関数の使用方法を間違って、 例えばprintf("%s\n", han2zen(s));のように使用していたため 変な値が返ってきていただけでした。助かりました。
527 名前:デフォルトの名無しさん [2009/03/24(火) 16:19:10 ] VS2005を使っているのですが、iostreamをインクルードすると error C2913:明示的な特殊化; 'std:iterator_traits'はクラス テンプレートの特殊化ではありません。 をはじめ100以上のエラーがでます。 xutilityというファイルが原因のようですが、特に書き換え等行っていません。 プログラムは別のPC(同じOS、同じVS)に移すとエラーを吐きません。 アドバイスを御願いします。
528 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 16:37:17 ] VSを入れ直す
529 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:06:31 ] ところで、 C言語のスレッド関係の関数をC++のクラスでとりあえずラップ・カプセル化っぽくした簡単な自作ソースコードがあるんですけど、 需要ありますか? 機能はかなり限定されてますけど、Windows(ほぼWin32 APIのみのVC++)用、確かLinux用(pthread。簡素です)と両方あります。 これ見られたら、ダメ出しをたくさんくらいそうだけど。
530 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:13:44 ] 需要ありますか?じゃなくて ダメ出しして欲しいんで見てくれませんか?だろ boost::threadがあるしな
531 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:16:28 ] >>530 だよな いらないよな
532 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:20:01 ] えー。マルチスレッドなprintfとか欲しいよ。 文字単位でスレッド分割して最終的に正しいストリームを形成するみたいな。 どう?
533 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:21:22 ] >>529 最近ねたが無いからうpれ
534 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:40:22 ] 土下座して頼むならうpってあげてもいいんですが。
535 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:05:54 ] >>530 ,531,533 それが本音で、ネタのためにも、うpしたかったと>>529 が申しております。 よかったら見てやってくださいとのこと。 多分、これだ。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8998.zip
536 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:31:51 ] >>535 このスレ見るものが、怪しげなzipファイルを踏むとは思えないんだけど
537 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:44:13 ] オレは踏んだ そしてどちらかの環境(Win,Linux)しか使わないなら必要ないと判断した
538 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:59:44 ] svg形式を解析・出力するようなオープンなライブラリないのかな なけりゃ自力で作るんだが・・・完全準拠って大変だな・・・ 改めてブラウザって大変なんだなって思うわ
539 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 21:13:22 ] ないわけないやろが
540 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:34:19 ] >>538 オープンの意味による。 GPLならいっぱいあるが、Non-GPLでC/C++から使えるオープンソース実装は多分ないと思う。 ていうかあるなら俺に教えてくれ。 OpenVGもNon-GPLで非プロプライエタリな実装が見あたらないんだよ。 リファレンス実装をGPLで配布するとかマジやめて欲しい。
541 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:42:20 ] ハノイの塔を解くプログラムを書いたのですが、結果が正しいのかわかりません。 どなたか検証していただけないでしょうか? ↓ソース kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8999.c ちなみに、円盤の個数が5までなら正しいのを確認してます。
542 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:14:36 ] 5個まで正しいなら、6個目も正しいのは簡単にわかるよ。 なぜなら、6個目の解法は 5個目までの解法+一番下を動かす+5個目までの解法(ただし最初とは使う柱が違う) だから。 ちなみに7個目の解法は 6個目までの解法+一番下を動かす+6個目までの解法(ただし最初とは使う柱が違う) 以下同様。ハノイは簡単。
543 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:19:59 ] >>541 危なっかしい警告が出てるので、まず潰したほうがいい。 結果はこれと比べとき。 #include <stdio.h> int Solve(int num, int step, int from, int to, int tmp) { if (num) { step = Solve(num-1, step, from, tmp, to); printf("%d 手目: %d -> %d\n", step++, from, to); step = Solve(num-1, step, tmp, to, from); } return step; } int main(void) { int num; printf("円盤の個数を入力して下さい: "); scanf("%d", &num); Solve(num, 1, 0, 2, 1); return 0; }
544 名前:デフォルトの名無しさん [2009/03/25(水) 08:23:34 ] for (list<int>::iterator i = lists.begin(); i != lists.end(); ++i) { if (iが何かの条件を満たしているとき) lists.erase(i); } とやれば、リストをたどって、条件を満たしている要素全部を消していくことができますか?
545 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 08:46:11 ] remove_if
546 名前:デフォルトの名無しさん [2009/03/25(水) 09:02:16 ] RemoveとEraseはなにが違うんですか?
547 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:27:35 ] >>546 あなたのお使いのライブラリの仕様によります。 STLについてなら、RemoveもEraseもありませんのでremove, eraseのことだと思いますのでそれについては以下に。 removeは対象の要素が指定したキーと一致した場合のみ削除しますが、eraseは一致を確認することなく削除します。 但し、removeは対象となるコンテナがlistの場合のみ使用できます。 尚、algorythmにあるremoveは、対象要素を移動しますがメモリの後始末はしないので注意が必要です。
548 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:34:29 ] >>541 円盤の番号を上から1〜n、手順を1から数えるとして、手順mに動かす円盤は手順mを 二進表現したときの最初の1が下から数えて何番目に出現するか数えればいい。 例えば、100手目に動かす円盤を知るには先ず100の二進表現を得ればいい。 これが110100なので、下から3番目が1と判る。つまり、上から3番目の円盤を動かすと知れる。 要は、再帰は必須ではない。
549 名前:デフォルトの名無しさん [2009/03/25(水) 12:19:05 ] >>547 ありがとうございます。VC++9を使ってます。 listの中を1周しながら、条件に合うものをerase()しているのですが、1周する途中で デバッグエラーに引っかかります。何が間違ってるのでしょうか?
550 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:26:29 ] 要素の追加、削除した後のiteratorって保障されないんじゃないの? remove_ifとかした後で、いらない要素をまとめてeraseすればいいんじゃないだろうか
551 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:35:17 ] >>544 erase() に渡されたイテレータは無効にり、無効なイテレータは インクリメントできない(未定義動作になる)。 www.google.co.jp/search?q=%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF+%E7%84%A1%E5%8A%B9
552 名前:541 mailto:sage [2009/03/25(水) 17:06:53 ] お礼が遅くなってすみません。 大丈夫みたいですね。どうもありがとうございました。
553 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:32:34 ] list< int >::iterator i = lists.begin(); while ( i != lists.end() ) { i = lists.erase( i ); // erase()は削除した要素の次の要素を指すイテレータを返す } こんなかな。っていうか、STLでは自前のループはなるべく書かない。
554 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:54:06 ] C++で変数(例えばdouble型)に#INFを代入する方法はないでしょうか? 出来れば環境依存しない方法を探しています。
555 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:59:03 ] 依存無しは無理だろ 浮動小数にIEEE754を使うことが定められてるわけじゃないから INFなんてものが存在するとは限らないし
556 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:40:44 ] >>554 std::numeric_limits<double> infinity() 存在するかどうかのテストも用意されてたはず。
557 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:41:42 ] >>554 環境依存だろうけど x=1e+1000;
558 名前:デフォルトの名無しさん [2009/03/25(水) 21:59:14 ] Windows(Vistaです)のC++でsleep(秒)を使おうと思っているのですが、どのヘッダを インクルードすればよいのかわかりません。結局 #include <windows.h> をインクルードして、 Sleep(ミリ秒); を使ってますが、Windowsでsleep()はつかえるのでしょうか?
559 名前:sage [2009/03/25(水) 21:59:39 ] すみません。古い技術で恐縮ですが、 VB6用のDLLをVC++で作成するとき、 VB6で使用するタイプライブラリはどのように作成するのでしょうか?
560 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:21:08 ] >>558 それしかありません
561 名前:デフォルトの名無しさん [2009/03/25(水) 22:53:14 ] >>560 わかりました。 ありがとうございます。
562 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:48:06 ] VC6.0でビットマップAの特定座標にビットマップBをコピーして、 それらを一切表示せずにビットマップCとして保存したいのですが、 BitBltという関数を用いれば可能なのでしょうか?
563 名前:デフォルトの名無しさん [2009/03/26(木) 01:26:02 ] C++で、名前なし名前空間に関数を書いた場合とただのスタティック関数は、機能面から 考えたら同じと思っていいですか? そのファイル内からだけ使えるという点で。
564 名前:デフォルトの名無しさん [2009/03/26(木) 01:37:41 ] おい、誰か答えろや。 答えんかい!
565 名前:デフォルトの名無しさん [2009/03/26(木) 02:43:02 ] 関数使わなくても 座標計算してあとは合成すればいい まああれだ
566 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:26:22 ] >>564 ちょっとだけ違う
567 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:54:26 ] そのへんは週刊 名前空間・創刊号に詳しく載ってるから買ってくるといい 確か初回は特製boost::binderがついてくるはず
568 名前:デフォルトの名無しさん [2009/03/26(木) 05:27:59 ] >>566-567 ほんとに役に立たないスレだな。 もっとちゃんと答えろ。 こっちは眠いのを我慢してレス待ってんだから。 早くしてくれや。
569 名前:デフォルトの名無しさん [2009/03/26(木) 06:28:20 ] あー眠い眠い。早く教えてくれ。寝ちまうぞ。
570 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:55:12 ] いいよ。
571 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:57:10 ] おやすみー
572 名前:デフォルトの名無しさん [2009/03/26(木) 07:04:18 ] >>570-571 はやく助けろや。 こっちは急いでんだわ。
573 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:15:17 ] おぅ。わかった。すぐに答えるからちょっと待ってろ
574 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:21:27 ] >>563 リンケージが違う。といっても、どのみちファイル外からはアクセスできないんで あまり実用上の違いはない。 「リンケージが違う」ことを意識して、わざと違いの出るサンプルを作るとこんな感じ。 他にもあるかもしれないけどね。 template<void (*)()> int t() { return 0; } namespace { void an() {} } static void st() {} int main() { return t<an>(); } // t<st> はコンパイルエラー
575 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:28:56 ] もっとわかりやすく説明しろよカスども
576 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 08:39:31 ] あたまだいじょうぶでちゅかあ? ことばわかりまちゅかあ?
577 名前:デフォルトの名無しさん [2009/03/26(木) 08:44:02 ] わからないでちゅ・・・