[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 20:36 / Filesize : 218 KB / Number-of Response : 953
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part78



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/

208 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:05:31 ]
>>207
そうだよ。

209 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:08:17 ]
YOUバイナリ読んじゃいなYO

210 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:08:49 ]
>>208
ありがとうございます。
asmからは逃げ回ってきているので全然読めそうにありません。
勉強しなければなりませんね。。。

211 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:09:33 ]
別に勉強しなくても片手間にasmの命令リストと見比べてるだけだけどね。

212 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:15:53 ]
asmってコンパイラやアセンブラによって
扱いが違うからやだ

213 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:16:19 ]
なんかアセンブリって難しそうなイメージある
低級だから追いかけるのが大変なだけで難しい構文とかはむしろ少ないんだろうけど・・・

214 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:21:24 ]
アセンブリ自体は簡単だけど、他の言語で出来ることをアセンブリでするとか考え出すと難しい

215 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:23:20 ]
アセンブリで全部済むならプログラミング言語なんて必要ないわけで

216 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:27:53 ]
そう考えるとC言語とか
移植性もあってすげえ言語だな。
今更だけど。





217 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 00:45:23 ]
>>216
cが優秀じゃなくてcコンパイラ作った人が優秀なだけだな

218 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:11:59 ]
規格作ったやつだ。
Cコンパイラは、上司が監視して下っ端が要求通り作ってるだけ。
初めの設計図が一番。
たとえば、アニメは動画マンという超低賃金のやつらがやっているが
宮崎駿や原作漫画家がいるから開発できるんだ。

219 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:18:03 ]
>>218
現存するコンパイラは確かに規格ありきで作り始めてそうだけど、元々は
たくさんの環境向けに作られていた C の共通部分を元に規格化されたんだから、
先にコンパイラ作ってた人が下っ端ということはないだろう。

220 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:33:47 ]
>>219
まあ初期のC言語確立やコンパイラ作ったような人たちは
上も下もねーだろうな
小さいチームで多少リーダー的存在がいるくらいだろうし
そういう中で試行錯誤しながらとかだろうし

その後の各環境ごとのコンパイラ開発はC言語そのものがあるんだし
それにあわせちゃえばいいので作業だろうな
(でもそれなりに知識は要るので下っ端ってわけじゃないだろうけど

221 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:48:53 ]
>195
そんな渡し方したら危険じゃない?


222 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 05:22:11 ]
ファイルIO( open close load)がかなり時間かかるから
要求を並列で出しておくと時間短縮するね。
細かい多数のファイルで2倍-3倍くらいの向上。

223 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:34:44 ]
5倍を目指してくれ

224 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:29:30 ]
files=20

225 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 12:47:04 ]
dmr にあやまれ。

226 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 14:45:10 ]
How many files(0-15)?■



227 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:58:57 ]
じじい乙

228 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 17:54:32 ]
ここの人ってワイルドカード欲しい時に何使ってるの?
boost使ってる人なら正規表現なんだろうけど、
使って無い人が気になる。

229 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:03:44 ]
windows api か
正規表現で代用

230 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:21:07 ]
俺は魔法だなあ

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>使いなよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<218KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef