1 名前:デフォルトの名無しさん [2010/03/23(火) 00:57:51 ] スレを勃てるまでもない低俗な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/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ スレを勃てるまでもないC/C++の質問はここで 13 pc12.2ch.net/test/read.cgi/tech/1260842197/
44 名前:デフォルトの名無しさん [2010/03/24(水) 01:49:28 ] shared_ptrとunique_ptrはどう使い分けますか? 全部shared_ptrじゃ、ダメなんですか。
45 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 02:09:21 ] >>44 実行速度が気にならないなら全部shared_ptrで構わない。 shared_ptrを使った場合はプログラマが1個のshared_ptrからしか参照されないことを知っていたとしても 毎回参照カウンタを生成するため、そのためのオーバーヘッドが生じる。 unique_ptrは参照カウンタを使用しないため、1つからしか参照されないことが予め分かっているなら効率的。 また、shared_ptrの場合、一度ポインタをshared_ptrに格納してしまうとポインタの所有権を奪い返すことができない。 つまり参照するshared_ptrがなくなった時点でオブジェクトがdeleteされるのを止めることができない。 一方で、unique_ptrはrelease()によって所有権を放棄させることができる。 ぱっと思いつくのはこのくらい。
46 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 03:04:54 ] win32でピルドできる? Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 ... sourceforge.jp/magazine/10/03/15/0331223 もし誰も挑戦してみたいの試行RE2 Windows上でコンパイルするには、パッチを歓迎するだろうなされている。 どのようにre2/re2.hの上部にあるコメントを参照してくださいRE2、使用方法に関するドキュメントしてください。 code.google.com/p/re2/wiki/Install No attempt has been made to make RE2 compile on Windows, but if anyone would like to try, patches would be welcomed. For documentation on how to use RE2, see the comment at the top of re2/re2.h.
47 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 09:17:07 ] endlみたいに空の()を省きたいが、マニピュレータではない関数を作ってみたいんですけど、 分かりやすいサイトもしくはサンプルもしくは検索語無いですかね?
48 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 11:34:19 ] ttp://soudan1.biglobe.ne.jp/qa3450940.html この質問者ではないんだけど、やりたいこととしては typedef unsigned int UINT; が定義されていなければ自分で定義したい。 擬似コードとしては以下のような感じ。 #ifndef UINT typedef unsigned int UINT; #endif 冒頭の URL は実行時に判定しているけど(それはそれですばらしい) やりたいのはコンパイル時です。
49 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:03:41 ] >>48 OKWaveの回答者はなにやら勘違いしているようだけど、あるかないかはエラーかどうかで判断できる。 なので、コンパイルしてみてエラーになったら定義すればいい。 逆に言えば、汎用的な手段で判定することはできないので悪足掻きするだけ無駄。
50 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:14:51 ] template<typename T=unsigned>struct mkUINT{typedef T UINT;}; #define mkUINT() typedef mkUINT<UINT>::UINT UINT; mkUINT()
51 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:38:46 ] >>48 そこの回答だと namespace fuga { typedef unsigned int UINT; } using namespace fuga; を加えるとエラーになるよね
52 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:43:10 ] >>45 誤解されがちなshared_ptrに補足 引数でshared_ptrを渡したいときは const shared_ptr<hoge>& とすればコピーのオーバーヘッドは発生しないし。 ->は参照カウントと変更しないからオーバーヘッドはないよ。 new に対するshared_ptrのコストは無視できる。 まあ、大抵のshared_ptrのコストは無視できるよ。ホントにボトルネックになったときに考えればいい。
53 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 16:12:35 ] >>52 const でもカウントアップされないと困る場合もあると思うけど。
54 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:30:37 ] どんなとき?
55 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:39:48 ] カウントしておかないと実態が解放されちゃうことがあるよ。 これが起こるはずがないというのは本末転倒。 元々その辺の管理をやらなくていいようにするための物なんだから。
56 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:47:28 ] const参照の参照元が掴んでるから平気じゃね。 必要に応じてコピーすればいいし
57 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:48:23 ] 別スレッドに渡すと死ぬる
58 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:50:01 ] スタック上にchar[sizeof]で確保した領域に 別の型のオブジェクトをplacement newするのは危険、と小耳に挟んだんだけど本当?
59 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:52:20 ] ヒープであっても危険
60 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:57:04 ] >>56 だからずーと掴んでおく必要がないのが shared_ptr でしょうに。
61 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:00:24 ] >>58 char[sizeof]を宣言してる関数から抜けたら駄目でしょう。 別に placement new だからというわけでもないと思うけど。
62 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:03:53 ] >>61 関数を抜けなければ大丈夫とお思い? d.hatena.ne.jp/Cryolite/20051102
63 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:10:12 ] >>61 オブジェクトのメンバにchar[sizeof]で確保されたメンバがあって、オブジェクト自体が自動変数だった場合を想定してます。 >>62 それを呼んでもどういう場合が危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・
64 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:14:43 ] >>62 それは処理系から来る制限であり、元の仕様とは関係ない。 問題のある処理系ではそのようなコードを書かないのは当たり前のこと。 逆にメモリ管理を上書きしたいんだから、その辺のことを考慮するのは当然だろ。
65 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:18:46 ] >>63 >危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・ わからない人が使うものではないと思いますが、使う理由は何ですか?
66 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 20:19:29 ] >>64 話がずれてるだろお前
67 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 09:41:55 ] char name[MAX_PATH] = ""; nameを\0で、埋め尽くしたい場合にどう記述すれば良いのでしょう。
68 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:06:16 ] その書き方で全部'\0'で埋まってないか?
69 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:19:54 ] >>67 最初だけで良いなら static を付けて宣言する それか memset(name, '\0', MAX_PATH); で毎回クリアするとか
70 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:21:25 ] >>67 char name[MAX_PATH] = {'/0'};
71 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:22:05 ] 訂正 /0じゃなくて\0ね。
72 名前:67 mailto:sage [2010/03/25(木) 10:41:55 ] 初期宣言時 char name[MAX_PATH] = {'\0'}; 変数クリア時 memset(name, '\0', MAX_PATH); 解決しました、ありがとうございます。
73 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:26:32 ] Modern C++ Designにpointeeって出てきたんですけどこれって何者なんですか?pointerの誤植じゃないですよね?
74 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:43:36 ] employ 【動】雇用する employer 【名】雇用主 employee 【名】従業員 とか言うのと同じ
75 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:48:29 ] ポインタが示す先ってこと?
76 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:51:42 ] int pointee; int *pointer = &pointee;
77 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:55:01 ] >>72 memset(name, '\0', sizeof name); の方がよくない?
78 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:58:42 ] マクロ定数で決まってる配列のサイズを、sizeofにわざわざ変える必要はない。
79 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:46:16 ] メッセージを表示させて時間が来たら消します i= MessageBox(hwnd, Message, Title, MB_OK); Set timer 時間経過→ SendMessage(?,WM_KEYDOWN,VK_RETURN,0); Killtimer SendMessageでMessageBoxにエンター入力して表示を消すつもりです。 WM_KEYDOWNにVK_RETURNを送るとエンターの入力になりますよね? また、MessageBoxのハンドルをどうやって所得すればよいのか解りません。
80 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:48:39 ] スレチ
81 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:54:32 ] >>79 MessageBox 使わず、自分で CreateDialog すればいいじゃん。 SendMessage は控えよう!
82 名前:79 mailto:sage [2010/03/25(木) 16:18:07 ] API向けのスレでした…すみません。 CreateDialogも調べてみます。
83 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 16:47:35 ] >>74 ,76 thxです
84 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:32:49 ] カンマ区切りの文字列sがあったとして foo(strtok(s, ","), strtok(NULL, ","), strtok(NULL, ",")); なんて呼び出しをしたいんだけど、strtok は第一引数の場所から 順番に呼び出されるって保証がありますか?
85 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:34:34 ] 無い
86 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:34:40 ] ない
87 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:36:03 ] ない 実際の実装ではむしろ逆から呼ばれる傾向にある (後ろの引数からスタックに詰むため) これも必ずそうというわけではないが
88 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:40:22 ] >>85-87 面倒でもいったん変数に取り出す必要があるんですね。 どうもです。
89 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 23:37:22 ] fopen("1.txt",fp)後に while (fgets(s, 256, fp) != NULL) {Line++}で行数を読み込みます。 Lineが100あり、30行目の内容を読み込みたい時ですが、 int a=30,Line=0; while (fgets(s, 256, fp) != NULL) { Line++ if(Line=a) 適当な関数(s); } 上の記述だと1〜30まで繰り返しますが、ダイレクトに30行目を読み込む方法ってあります? for()
90 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 00:30:22 ] 1行の長さが不定なら前から見ていくしかないよ
91 名前:デフォルトの名無しさん [2010/03/26(金) 02:40:50 ] BOOLEAN BOOL boolean bool どれ使えばいいの?(´;ω;`)
92 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 03:06:31 ] BOOLかbool
93 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 06:25:42 ] ありがとう
94 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:41:27 ] >>89 そのソースだと全行で関数が呼び出されるぜw
95 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:45:48 ] algorithmのstd::remove()について質問です。 std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); std::remove(v.begin(), v.end(), 0); std::remove(v.begin(), v.end(), 1); printf("%d", v.size()); 上記のようにすると、最後のvのサイズは1を期待するのですが3のままです。 でも、v[0]には本来の0ではなく2が入っています。 v[1]もv[2]も2が入っています。 std::remove()の代わりにvector::erase()を使用すれば、 v.size()は1を返します。 std::remove()はそういうモノなのでしょうか? VC2008で確認しています。
96 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:55:20 ] >>95 そうです 期待通りの動作をさせるには v.erase(std::remove(v.begin(), v.end(), std::compose2( std::logical_or<bool>(), std::bind2nd(std::equal_to<int>, 0), std::bind2nd(std::equal_to<int>, 1))) とする必要があります
97 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:57:09 ] あ、ごめん v.erase(std::remove(v.begin(), v.end(), std::compose2( std::logical_or<bool>(), std::bind2nd(std::equal_to<int>, 0), std::bind2nd(std::equal_to<int>, 1)), v.end()) だった removeは残す要素の候補を前に集めるだけで、実際の削除は しませんのでstd::eraseもしくはメンバ関数eraseを使います
98 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:18:20 ] >>97 erase 使うのならそんな面倒なことせず remove を erase に置き換えれば良いだけだと思うけど。
99 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:56:46 ] v.erase(std::remove(v.begin(), v.end(), 0), v.end()); v.erase(std::remove(v.begin(), v.end(), 1), v.end()); これでいいね removeは第三引数にリファレンスを取るのでlogical_orが使えないな
100 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:00:18 ] 使うとしたらremove_ifとboost::bindを組み合わせるかだ
101 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:05:16 ] やっと動いた これは読みにくいわ(^ω^;) v.erase( std::remove_if(v.begin(), v.end(), boost::bind( std::logical_or<bool>(), boost::bind(std::equal_to<int>(), _1, 0), boost::bind(std::equal_to<int>(), _1, 1) ) ), v.end());
102 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:08:36 ] ちなみにboost::bindを使ったのは、標準C++にはstd::compose2が無いためです
103 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 15:02:28 ] 質問は >std::remove()はそういうモノなのでしょうか? であって、そういう汚いコードに興味はありません。
104 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 16:54:30 ] boost使ったからまだ綺麗なんだぞ もっと汚いコードは山ほど書いてきた
105 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:12:19 ] >>104 だから、コード書いてくれなんて誰も頼んでないつーの。 オナニーはよそでやってくれ
106 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:23:03 ] ときどき void main って書くやついるよね。 なんなんだろうね。馬鹿じゃないかと思うよね。
107 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:28:36 ] まともな事には答えられないからって、同じ話題をループさせようとすんなよw
108 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:46:36 ] オブジェクト(インスタンス)を生成するときに変数をポインタにするのとしない場合が ある理由を教えてくださいませませ Unko* unko_kusai Chinko chinko_1
109 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:51:11 ] >>108 生成パターンを使うと大抵ポインタにならないか? それから仮想関数で使う場合もポインタにしなければならない
110 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:04:49 ] 別に参照でもいいよ
111 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:06:33 ] >>108 変数にすると、生存期間をコントロールできない。 ポインタなら自由にコントールできる。 けど自由な分手間もかかるし、プログラマが責任を持つ必要がでてくる。
112 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:08:00 ] >110 仮想関数の場合な 使う場面は限られるけど 生成パターンでもシングルトンだと参照の場合もあるし
113 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:16:56 ] Hoge hoge; { HogeBase &h = hoge; h.vfunc(); } ポインタじゃなくてもvtable参照してくれますよ
114 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:12:27 ] >>113 知ってるから わざわざ書かなくてよろしい
115 名前:108 mailto:sage [2010/03/26(金) 23:44:05 ] レスありがとうございます 今勉強してるサンプルプログラムでポインタあ・なしの両方が出てきて、何故に使い 分けてるのか疑問だったのですが、一方は複雑なことやる必要があるからポインタ、 もう一方はその必要が無いなら安全なポインタ無し という風に使い分けてるという解釈で おkですかね?
116 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 23:46:46 ] >>115 自動で済ませられるなら自動に任せるって琴田
117 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:57:48 ] >>99 初回のremove()の結果を二回目のremove()の第二引き数とすればerase()は一回でいいんじゃね? >>101 だとすればわざわざそんなややこしいbind()するメリットもないんじゃね?
118 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:46:00 ] >>115 メモリリークするバグを潰すのは大変だ。と前置きをした上で。 ポインタにしなかった場合、その変数のスコープから抜けるときに 変数の後始末を自動でやってくれる。つまりメモリリークの心配がない。 これは色々処理をする途中で、エラーが発生したら中断、みたいな処理をするときにはとても楽。 ポインタを使った場合、中断するときにnewしたオブジェクトを正しく全てdeleteしないと メモリリークになるのでよく注意する必要がある。 一方で、>>109 の言うようにオブジェクトの生存期間を自分で管理したい場合や、 継承を使ったオブジェクトを使いたい場合、 もしくは大きなオブジェクト(大きな配列など)はポインタを使う必要がある。 C++であれば、ポインタでありながら、メモリリークの心配がいらないスマートポインタという 仕組みがよく使われる。(boost::shared_ptrなど) これを使うと普通のポインタよりも実行速度がやや遅くなるが、普通は気にするほどではない。
119 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:54:03 ] 速度気にならなければ、動的メモリ確保をすべて乗っ取って ガベージコレクションした方が良い。 ヘッダ変更だけで済む
120 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:55:54 ] はじめからnewを使わないという戦略もある STLをうまく使えば、スマートポインタ、ガベージコレクション、new はほとんどいらんだろう。
121 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 05:50:38 ] >>117 >初回のremove()の結果を二回目のremove()の第二引き数とすればerase()は一回でいいんじゃね? アホ removeの戻り値は削除候補の先頭だ 前に集められた候補の中に次に削除したい値が含まれているので その方法はダメ >だとすればわざわざそんなややこしいbind()するメリットもないんじゃね? だったらお前が何か書いて見せろや 口だけ出して何もしない奴が一番嫌いだな
122 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 08:34:09 ] >>121 間抜けで頓馬で馬鹿と来ちゃ、どうしようもないな。 ・間抜け 削除候補が集められるのは前じゃなくて後ろだよ。 つまり、「後ろに集められた削除候補の先頭」が戻されるって訳。 ・頓馬 自分で確認すれば間違いに気付けたのにそれさえしないんだからな。 ・馬鹿 その上、何か書いて見せろって自分が書けもしないのによく言うよ。 馬脚を現わした挙句に自ら墓穴を掘ったわけだ。
123 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 08:43:16 ] >>122 間抜けのアホはお前だ >削除候補が集められるのは前じゃなくて後ろだよ。 >つまり、「後ろに集められた削除候補の先頭」が戻されるって訳。 そんなもん常識だろ >>121 のどこにこれを否定するような文が書いてある? >>117 の通りにしたら1が削除されずに残ってしまうだろ 実行して試してみ それとも図星を突かれて悔しくてファビョったのか?
124 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 08:52:48 ] 二人とも言い合いせずに特に>>122 はプログラム例を書いて示せ お前さんの言いたい事はこういう事だろ? std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v.end()); std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; std::printf("%d", v.size());
125 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:35:13 ] >前に集められた候補の中に
126 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:38:05 ] >>125 合ってるじゃないか 前に集められた「削除から外される」候補の中にと文脈からは取れるだろ >前に集められた候補の中に次に削除したい値が含まれているので これをよく読め
127 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:39:47 ] 要するに>>122 はイチャモン付けて喧嘩したいだけなんだよ 相手が誰であろうと構わないわけだ だったら痛くも痒くもないネット内でのビビリ喧嘩などせずに 街に出てDQNに喧嘩吹っ掛けてボコボコに殴られてこい
128 名前:122 mailto:sage [2010/03/27(土) 09:51:16 ] んじゃ、>123のために私の書いたのを貼っておく。 まぁ、>124と核は同じだね。 -- #include <algorithm> #include <cstdio> #include <vector> int main() { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); for (int ic = 0; ic < 10; ++ic) { v.push_back(ic % 5); } v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v .end()); for (std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++i t) { printf("%d\n", * it); } return 0; } -- それはさて。 >>>121 のどこにこれを否定するような文が書いてある? >121には「前に集められた候補」とあるんだけどな。 まぁ、「削除候補とは書いてない」と言い出すだろうからまぁいいや。
129 名前:122 mailto:sage [2010/03/27(土) 09:59:35 ] うぉっ、80カラムでぶった切れているから難癖つけられる前に問題の行だけ再掲。 -- v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v.end()); for (std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) { -- つーか、書いている間に予想通りのレスがついてて笑えた。 無茶しやがって……
130 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 10:00:31 ] >>128 >>126 お前の目はフシアナだ
131 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 10:44:25 ] >>126 >removeの戻り値は削除候補の先頭だ >前に集められた候補の中に次に削除したい値が含まれているので 一行前に削除候補って書いてあるのに、次の行の候補が「削除から外される」候補と 読むのはかなり無理がある
132 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 10:48:56 ] >>131 お前の頭が悪いからだ その分だとプログラムもバグだらけだろう
133 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:00:02 ] >>132 いい加減見苦しい。 説明が下手か勘違いしていたのかは詳らかではないが、 そもそも>117で巧くいくことははっきりしている。 他人を嫌う前に、ご自身の言動を見直してみては如何?
134 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:03:36 ] >>133 見苦しいのはお前の方 こちらの説明が間違ってないのに間違って言い張るお前は馬鹿
135 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:08:20 ] >>120 STLをうまく使うにはスマポは必須だけどね。 スマポでもshared_ptrならmake_sharedを使えばnewもいらず例外安全性も確保されるようになるし。 STL+shared_ptrでnewもガベコレもいらなくなるね。
136 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:11:45 ] >>117 はせっかっく良いことをいったのに、挑発レスを受け流せずに台無しだ。
137 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:13:16 ] >>117 は単純馬鹿だからな この分だと仕事場でも>>117 は同僚とぶつかってばかりだろう
138 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:18:35 ] >>121 > その方法はダメ 見苦しい弁解まだ〜w
139 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:31:30 ] 的外れな突っ込みをするバカが一番悪いだろw
140 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:33:44 ] >>99 これで単純明快なのにケチを付ける奴が一番悪い
141 名前:115 mailto:sage [2010/03/27(土) 12:05:39 ] 皆様詳しいレスありがとうございました。 色々まだ自分の知らないワードが出てきたのでググって勉強しますぉ。
142 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 21:51:58 ] SetTimerでタイムアウト後、タイマのプロシージャの中でKillTimerしても良いんでしょうか? プロシージャ外じゃないと駄目なんて事は
143 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:13:10 ] >>142 なんのSetTimer? Win32ならWin32スレで聞くと詳しいぞ
144 名前:142 mailto:sage [2010/03/27(土) 22:21:24 ] SetTimerはWin32でした、すみません。