1 名前:v(^・^)v mailto:sage [2010/02/13(土) 23:18:03 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part77 pc12.2ch.net/test/read.cgi/tech/1263556932/
231 名前:デフォルトの名無しさん [2010/02/19(金) 21:12:55 ] そもそもワイルドカードと正規表現がどうつながるんだ?
232 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:14:55 ] ワイルドカードでできる事は正規表現でできるだろ
233 名前:デフォルトの名無しさん [2010/02/19(金) 21:31:27 ] C++ でできる事はアセンブラでもできるんだが そういう問題ではあるまい?
234 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:33:36 ] 何を言ってるんだ…
235 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:36:52 ] ポインタが使える人、暇な人に質問です。 下のコードはメモリの確保と解放がきちんとなされてるでしょうか? codepad.org/GUSgjZWM
236 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:39:35 ] 異常なし
237 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:45:42 ] 暇な人とは失礼な 改めていわれなくてもこんなところ見てる段階で暇・・・
238 名前:デフォルトの名無しさん [2010/02/19(金) 22:05:30 ] >>233 正規表現が無い環境だってあるじゃない。 外部ライブラリも不可とか。 その例で言うとC++が使えない環境という事。 「C++使えないなんてあるわけないじゃん」とは言えまい?
239 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:10:36 ] >>238 C++使えないって、組み込み系とかですか? なんかろくなコンパイラがないってことなんでしょうか。
240 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:19:26 ] >>239 例えばの話です。 組み込み系なんてサッパリ^O^
241 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:23:34 ] なんで2つの言葉のつながりから、環境がどうこうの話になるんだ。 話の流れ方に病的なものを感じる。
242 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:24:52 ] 病的っていうか、知ったばかりの単語を中学生が使いたがってるだけな雰囲気
243 名前:デフォルトの名無しさん [2010/02/19(金) 22:26:19 ] >>238 あったねー、OS にワイルドカードがなくてアプリが独自にサポートしてたケース アプリごとに微妙に解釈が違ってて脱力ずっこけが何度もあった >>239 C++ 自体はどのシステムにでも使えるぞ、C++ で HEX や HDL が作れるわけで
244 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:26:46 ] >>235 パッと見だがリークすると思う t = new Test; を解放してない delete t; が必要じゃない?
245 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:28:24 ] 聞く前にop new/deleteでカウントするぐらいはやってみようよ
246 名前:235 mailto:sage [2010/02/19(金) 23:07:57 ] >>244 見落としてました。 >>245 new、deleteをオーバーライドってことでしょうか? やってみます。 どうもありがとです。
247 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:49:29 ] Test *New(int index0,int index1,int index2); の途中で失敗した場合のリークも
248 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:39:58 ] worker threadパターンを実装したいので 既存の関数を実効させる部分をテンプレートで 実装したいのですが、どのように書けばいいのか わかりません。 たとえば、f1、f2、f3を同じworke threadクラスで 扱うにはどのようにコーディングするのが正しいのでしょうか
249 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:47:04 ] スレッドを起動させっぱなしにするのがワーカースレッドっていうのか。 >>176 のunsigned WINAPI fnc(void *n);もワーカースレッドだな。参考にしてくれよ。
250 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:48:51 ] >>176 は一つのキューに挿入と取り出しを行い、3スレッド並列で空いたら スレッドからデータを取り出し処理を行う。
251 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:51:15 ] キューが貯まったら各関数に通知したら、ビジーループを防げるけど 面倒なので100ms毎に確認しに行くようになっている。
252 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 11:59:32 ] プログラムする時のやり方聞きたいんだが いきなり書き始める? きっちり考えて書く? 書き始めたとしても、ヘッダでインラインで書きまくって、動作したらcppと分割する? それとも最初からわけて書く?
253 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:28:31 ] 自分の場合大まかな方針は決めてから書く ただ、確実にこれはいるなってデータや関数は あまり考えないでも書く ヘッダにインラインで書くのはコンパイル時間との兼ね合い 大きいプログラムを書くときは最初から分ける 俺のオススメは 2回同じことを書くまでは出来るだけ抽象化しない 逆に2回同じことを書いた時点で必ず抽象化する こうすると、バグの発生源が重複しないので大分バグをつぶしやすくなる ただ、多人数での開発には使いにくいだろうが
254 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:30:19 ] >>252 まず絶対UMLとシーケンス図を書く その後細かいところはフローチャートを書く 2、3時間でできることだから必ず行う その後1回で製造する。
255 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:42:07 ] >>252 いきなり書く。 パフォーマンスを計る。 もう一度書く。 ライブラリ化する。
256 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:51:21 ] いきなり書くやつは下っ端だな。与えられる仕様をただこなすだけ。 ビル・橋・道路の設計者ではなく、日雇いの土木作業員。
257 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:58:58 ] まぁ、いきなり「本番」のコードを書くのは無謀だと思うけれども、 頭の中で色々練っている最中に、その助けとしてちょこちょこ手を動かすことはある。 メモというかスケッチというか、そんな感じのコード。 で、その一部が断片的に「本番」に流用されることならある。
258 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 14:52:22 ] すらすらとコードが書けないときは何かが間違ってるというのはあるねぇ
259 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:00:58 ] 図に書く スクリプトで書く 遅いところをC/C++に置き換える 寝る
260 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:08:48 ] まずコメントを先に書く トイレに行く コードを書きながら飯を食べる コメントを直す
261 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:11:11 ] 冷静に考えればいいだけだろうがばかどもが
262 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:13:31 ] やりたい事を考える 下っ端に薄給で作らせる
263 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 17:57:01 ] 継続での脱出みたいなことってC++で出来ますか? たとえばこんな関数があったときに、どこかでret=trueになったら 一番最初にfを呼び出した箇所へ飛んで関数を終わらせたい bool f(){ bool ret=false; //処理によってret=trueになったりならなかったり for(int i=0;i<n;++i){ret|=f();} return ret; } gotoで抜けられるのは今いる関数内のループだけだと思うので無理?
264 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:00:50 ] >>263 無理です。
265 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:07:53 ] >>263 たとえば、例外的なことがおきたときにプログラムの実行を中断したいというのであれば、 例外が使える。 だけど、例外は例外的な事以外に乱用すると非常に見通しの悪いプログラムになるから注意。
266 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 20:34:56 ] >>263 bool f(){ //処理によってret=trueになったりならなかったり for(int i=0;i<n;++i){if(f())return true;} return false; }
267 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:19:09 ] makeって使ったことがないのですが、 勉強した方がいいのでしょうか。
268 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:24:24 ] いい
269 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:25:15 ] IDEに任せっきりでmakeってのから逃げまくっていたのですが、 やっぱり勉強します。 ありがとうございます。
270 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:14:10 ] tbbを実用で使い出したけど、メモリ関係の例外が出まくるぞ。 いつもではなくたまに。どうみてもエラーになり得ないところで例外。 そのためにtbb_allocがついているのか。 メモリ管理をtbb専用で全部置き換えれば直るんですか。
271 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:29:16 ] >270 >いつもではなくたまに。どうみてもエラーになり得ないところで例外。 使い方が間違ってて排他処理で失敗してるだけじゃないの?
272 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:49:38 ] そうか。試しに全書き換えでやってみる。
273 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:16:49 ] #define allocator scalable_allocator とやると、 std::allocator がstd::scalable_allocatorになる。 std::allocator がtbb::scalable_allocatorにはどすればいい。 ::がdefineにかけない。
274 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:19:09 ] #define std tbbにしたらエラーでまくり。当然全関数対応しているわけはなく。
275 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:33:30 ] namespace std { typedef xxx::myallocator myallocator; } #define allocator myallocator
276 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:47:52 ] できないです template<typename T> class scalable_allocator; となっていて、テンプレート引数が必要と出ます
277 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:53:11 ] 単純なdefineの文字置き換えで出来ないかと考え中。 stdをstd0に書き換えて、tbbをstdにして、ここでヘッダを読み込み std0をstdに戻せば、善さげなきはする。 別名で存在している関数をdefineで置き換えたらいけそう
278 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:06:20 ] 駄目だった 再定義とか出る
279 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:08:02 ] バグの温床になりそうだな
280 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:25:01 ] 悪夢だ・・・
281 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:26:17 ] アロケータの置き換えはTBBのチュートリアルにやり方が書いてある
282 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:44:48 ] 面倒になってきたので標準装備のみで0から作るぜ
283 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:57:58 ] std::vector<int, tbb::scalable_allocator<int> >などとその都度指定する、 それをtypedefするというのは駄目なの?正統派だと思うのだけど。 C++0xなら template<typename T> using vector_tbb<T> = std::vector<tbb::scalable_allocator<T>>; と書いて、vector_tbb<int>とかvector_tbb<std::string>とか書けるようになるんだけど、 まだ未来の話……。
284 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 06:26:39 ] if文で真偽値を評価すると真になる要素がいくつあるか数えるのを短く書きたいです。 vector<int> a; // ;;;;;;; int n = 0; for(int i = 0; i < a.size(); ++i) if( a[i] ) n++; これを、 int n = std::count( a.begin(), a.end(), ?? ); ぐらいに短く書きたいのですが、なにかいい方法あります
285 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 06:30:24 ] ファンクタ使えば?
286 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 06:37:40 ] int n = a.size() - std::count(a.begin(),a.end(),0);
287 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 07:02:32 ] みなさまありがとうございます。 >>285 クラスを定義しようとすると、結局長くなってしまいますし、離れた場所に書くことになるため気に入りません。 >>286 それが良いですね。勉強になりました。 intの場合はそれでいいのですが、もうすこし一般化して、 if( a[i] >= 0 ) の場合などにも使える方法はありますか?
288 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 08:10:08 ] >>287 関数内クラス boost::lambda c+0x lambda関数
289 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 08:49:16 ] >>287 count_if(a.begin(), a.end(), bind2nd(not_equal_to<int>(), 0)) みたいなのをちょっとずつ変えれば
290 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 12:20:46 ] トークン結合演算子##を利用して どうにかならんかね?
291 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:00:32 ] 関数内にしかスコープのない関数って作れる? void foo(){ std::cout << "foo\n"; } の中で void foo(){ void bar(){std::cout << "bar\n";} bar();bar();bar();bar(); std::cout << "foo\n"; } こんな風に。 普通に考えてC++では違反だと思うのだが、 どうにか回避するトリックとか。
292 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:03:15 ] >>291 ローカルクラスを使う。 ttp://www.fides.dti.ne.jp/~oka-t/cpplab-tips-1.html
293 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 22:27:52 ] ローカルクラスは結構便利なんだけどなぜかあまり浸透してないよね
294 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 22:37:37 ] だってtemplateで外部にクラス渡せないし
295 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:05:50 ] 名前空間やモジュールシステムを持たないJavaScriptのような言語ならともかく C++ではあまり必要性がないと思う。ローカルクラスや関数内関数 クロージャはまた別だけど
296 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:08:02 ] ローカルクラスはtemplate引数も使えない。 あと0xでlambdaの型が外部に渡せるのに未だ渡せないローカルクラスは生きている意味があるのかと問いたい。
297 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:13:18 ] fainalなクラスとか? ローカルクラスにできて他にできないことって特にないよなぁ ローカルのほうが散らかさないで書ける場合はあるけど
298 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:17:58 ] 「外部に渡せる」の意味がわからん
299 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:18:33 ] ローカルクラスは昔使ってたけど、関数が大きくなって読みにくくなるんで匿名名前空間に置くようになった。
300 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:27:08 ] ローカルクラスはデストラクタで自動でリソース解放するのにたまに使ったり。 (=スマートポインタのデリーターみたいな感じ。) それとC++0xからはテンプレート引数に渡せるようになるね。
301 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:29:21 ] × デリーター ○ カスタムデリーター です。
302 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:35:29 ] 無名の名前空間だとヘッダに書かないといけないテンプレートクラスに使えないね
303 名前:291 mailto:sage [2010/02/22(月) 00:16:05 ] >>292 ありがとうございます。
304 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 00:49:41 ] std::string str[] = { "A", "B" }; これってバグの元になる? int i = sizeof(str) / sizeof(str[0]); こうするときとかに。
305 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 00:52:44 ] 動的配列であってもその実体は内部にelementのpointerを持っているだけなので 中身のデータが違ってもインスタンスの大きさはそれぞれ同じ。
306 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 00:54:13 ] >>305 即レスかつわかりやすい説明ありがとうございます。 不安がなくなりました。
307 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 00:58:51 ] C99で絶望するがよい。
308 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:01:14 ] 素直にvector<string>使いなよ。
309 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:03:48 ] >>304-306 何を心配してたのかわかんない。少し解説してもらえるとうれしい。
310 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:08:08 ] std::string a = "asdf", b = "9999999999999999999999999999999"; って文字列の長さが違うからsizeof(a)とsizeof(b)で同じ数値になるの!? std::stringで配列作っていいの!?!?!??!?!!!???わかんないです><;;;;; → のーぷろぶれむ
311 名前:304 mailto:sage [2010/02/22(月) 01:15:14 ] >>310 ありがとう。 その通りでした。 >>308 あとあと編集しづらいかな見にくいかなと思ったので。
312 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:47:53 ] クラス内にstatic constのint値を定義して, #defineの代わりにしたいんですが, このint値はそのクラスのインスタンスを生成してなくても, メモリ上に存在するのでしょうか? そうなると,大規模開発では避けるべきなのでしょうか?
313 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:51:08 ] #defineされた値だとプログラム全体の最適化がされない限り書く度に別々のところに数値が配置されるけどね。
314 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 02:00:33 ] グローバル変数ってlibファイルで共有? モジュールで共有?
315 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:47:17 ] >>312 最適化すりゃどうせ消える
316 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:00:22 ] >>312 まあ理屈はそうだけども、 現実的にはその最適化がなされないような状況は 明示的にコンパイルオプションで止めろ! と言わない限りおこんなinじゃない?
317 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:40:04 ] staticなんだからインスタンスは関係ないんじゃ
318 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:56:37 ] templateクラスのstatic変数ならあるいは
319 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:40:59 ] hiphopのwindows binaryありますか。phpコードをc++に書き換え、phpから利用できるようになるようなんですが。 ソースコード。 github.com/facebook/hiphop-php
320 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 01:04:04 ] 来月出版の C++テンプレートメタプログラミング 糞本かな? えぴなんとかさんの書いた類の糞本レベル?
321 名前:デフォルトの名無しさん [2010/02/23(火) 05:41:33 ] 禿本の邦訳にも係わってる人だよ
322 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 12:14:03 ] えぴなんとかさんってすごいのかどうかよくわからん 昔の掲示板ログとか見るととんちんかんな感じだよね えぴなんとかさんが初心者だったころなのかもしれないけど
323 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 18:19:02 ] これのことかな episteme.wankuma.com/stlprog/index.html
324 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 18:48:30 ] わんくま同盟ってなんか気持ち悪いよね 公開しているドキュメントでお世話になってはいるけど、近づきたくない感じ
325 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 19:14:15 ] 気持ち悪いというあいまいで感覚的な概念が気持ち悪い
326 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 19:41:10 ] 単に偉そうでむかつくんだろ
327 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 19:47:58 ] 「気持ち悪い」のはともかく、「よね」が意味わからん
328 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 20:52:33 ] 内輪ネタを表に出したがるあたりと偉そうなのはむかつくが同意は求めない
329 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 00:19:05 ] えぴなんとかさんって インなんとかさんみたいなもんか?
330 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 00:42:06 ] ペンネームに機種依存文字を使うプログラマの人って…
331 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 00:50:37 ] ビル☆ゲイツの悪口はそこまでだ