次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part134
http://mevius.5ch.net/test/read.cgi/tech/1516406742/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part135
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fcb-q1Nq)
2018/03/31(土) 20:20:06.25ID:o3PNwIlC0230デフォルトの名無しさん (ワッチョイ b704-9jjH)
2018/04/23(月) 13:44:26.09ID:Hh6TN2Aq0 >>229
日本語でしゃべってくれ
日本語でしゃべってくれ
231デフォルトの名無しさん (ワッチョイ 5b9b-Th9u)
2018/04/23(月) 13:58:46.97ID:1JtTwXqR0 実行してるということはコンパイルは通ってるということだと思う
つまりコンパイルの問題ではなく、コンパイルエラーではないだろうという推測
つまりコンパイルの問題ではなく、コンパイルエラーではないだろうという推測
232デフォルトの名無しさん (ワッチョイ 8723-wmjz)
2018/04/23(月) 13:58:59.41ID:Lxhtz3Yj0233デフォルトの名無しさん (ワッチョイ b704-9jjH)
2018/04/23(月) 14:45:37.00ID:Hh6TN2Aq0 初心者つってるから
どこまでがコンパイルで
どこからが実行なのかの
区別からあやしいと見ている
実行時エラーにしても
stopダイアログなのか
結果がおかしいのか
あの質問では言ってない
どこまでがコンパイルで
どこからが実行なのかの
区別からあやしいと見ている
実行時エラーにしても
stopダイアログなのか
結果がおかしいのか
あの質問では言ってない
234デフォルトの名無しさん (ワッチョイ 237f-9jjH)
2018/04/23(月) 14:53:14.79ID:48PNhEnX0 すげーみっともない奴だな
235デフォルトの名無しさん (ワッチョイ b704-9jjH)
2018/04/23(月) 14:56:19.11ID:Hh6TN2Aq0 嘘は言っていない
236デフォルトの名無しさん (スプッッ Sd5a-wmjz)
2018/04/23(月) 15:52:04.86ID:mDBTWEJod 言論の自由を行使し過ぎw
237デフォルトの名無しさん (スプッッ Sd5a-Incm)
2018/04/23(月) 16:27:46.06ID:So2OBlKcd コンパイルして(リンクを)実行すると
だったりして
だったりして
238デフォルトの名無しさん (ワッチョイ db2d-tR7F)
2018/04/23(月) 17:14:12.91ID:VArh9qU+0 初心者がいちいちobjからリンクしてるのか
239デフォルトの名無しさん (ワッチョイ b704-9jjH)
2018/04/23(月) 17:15:44.11ID:Hh6TN2Aq0 しつけえな
ここはプログラム技術板
技術的な内容が皆無のレスでひっ絡んでくるなカス
ここはプログラム技術板
技術的な内容が皆無のレスでひっ絡んでくるなカス
240デフォルトの名無しさん (ワッチョイ 9a34-lUQu)
2018/04/23(月) 17:30:01.10ID:orIXCmni0241デフォルトの名無しさん (ワッチョイ 9a34-lUQu)
2018/04/23(月) 17:32:39.31ID:orIXCmni0 あ、初心者だったのか…
242デフォルトの名無しさん (ワッチョイ ba60-Mp6C)
2018/04/23(月) 17:34:51.03ID:vGDXyrLu0243デフォルトの名無しさん (ワッチョイ 9a91-Aj1d)
2018/04/23(月) 21:12:48.39ID:7US5BnQm0 pthread を使ってループ処理をマルチスレッド化したのですが、シングルスレッドと同じスピードしか出ませんでした。
pthread でこういう事やっても無駄なんでしょうか?
pthread でこういう事やっても無駄なんでしょうか?
244デフォルトの名無しさん (ワッチョイ 7acb-BC+p)
2018/04/23(月) 22:04:36.67ID:C1tu+nEe0 流石に情報が少なすぎて
このままだと下手糞としか言いようがない。
ソースコード貼り付けれ
このままだと下手糞としか言いようがない。
ソースコード貼り付けれ
245デフォルトの名無しさん (ワッチョイ fa4c-+Cft)
2018/04/23(月) 22:09:13.69ID:oFP/MhUD0 シングルコアのPCかも
246デフォルトの名無しさん (ワッチョイ 9a34-lUQu)
2018/04/23(月) 22:17:20.63ID:1ikED9ud0 pthread使うとひとつの処理が倍速にでもなると思ったのだろうか
247片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3)
2018/04/23(月) 22:21:51.35ID:ATy8dQXfd 不完全な質問はスルーすっと
248デフォルトの名無しさん (ワッチョイ 9a91-Aj1d)
2018/04/23(月) 22:42:58.69ID:7US5BnQm0 舌足らずですみません。コードはこんな感じです。
threadFunctionは単なる加算値、joinFunctionは集計処理です。
コアは物理2論理4です。
template< class ArgType >
void Reduce( std::vector< ArgType >& threadArgs, void* (*threadFunction)(void*), void (*joinFunction)(std::vector< ArgType >&) )
{
const size_t threadCount = threadArgs.size();
threads.resize( threadCount );
std::vector< void* > voidPtrArgs = CastArgsToVoidPtrs( threadArgs );
for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex )
{
sched_param schedParam;
schedParam.sched_priority = sched_get_priority_max( SCHED_FIFO );
pthread_attr_t threadAttribute;
pthread_attr_init( & threadAttribute );
pthread_attr_setschedpolicy( & threadAttribute, schedPolicy );
pthread_attr_setinheritsched( & threadAttribute, PTHREAD_EXPLICIT_SCHED );
pthread_t& thread = threads[ threadIndex ];
pthread_setschedparam( thread, schedPolicy, & schedParam );
pthread_create( & thread, & threadAttribute, threadFunction, voidPtrArgs[ threadIndex ] );
}
for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex )
{
pthread_t thread = threads[ threadIndex ];
pthread_join( thread, NULL );
}
joinFunction( threadArgs );
}
threadFunctionは単なる加算値、joinFunctionは集計処理です。
コアは物理2論理4です。
template< class ArgType >
void Reduce( std::vector< ArgType >& threadArgs, void* (*threadFunction)(void*), void (*joinFunction)(std::vector< ArgType >&) )
{
const size_t threadCount = threadArgs.size();
threads.resize( threadCount );
std::vector< void* > voidPtrArgs = CastArgsToVoidPtrs( threadArgs );
for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex )
{
sched_param schedParam;
schedParam.sched_priority = sched_get_priority_max( SCHED_FIFO );
pthread_attr_t threadAttribute;
pthread_attr_init( & threadAttribute );
pthread_attr_setschedpolicy( & threadAttribute, schedPolicy );
pthread_attr_setinheritsched( & threadAttribute, PTHREAD_EXPLICIT_SCHED );
pthread_t& thread = threads[ threadIndex ];
pthread_setschedparam( thread, schedPolicy, & schedParam );
pthread_create( & thread, & threadAttribute, threadFunction, voidPtrArgs[ threadIndex ] );
}
for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex )
{
pthread_t thread = threads[ threadIndex ];
pthread_join( thread, NULL );
}
joinFunction( threadArgs );
}
249デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/23(月) 22:45:44.01ID:reOPAGg30250デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/23(月) 22:51:38.20ID:reOPAGg30251デフォルトの名無しさん (ワッチョイ 578a-/Wij)
2018/04/23(月) 22:53:42.39ID:voecBiJS0 釣り針デカいな
252デフォルトの名無しさん (ワッチョイ 2304-+3cQ)
2018/04/23(月) 23:14:39.42ID:gZ/aKTVF0 いまだに関数ポインタ使ってるのか。野蛮人。
std::functionってスレッドセーフじゃないの?
std::functionってスレッドセーフじゃないの?
253デフォルトの名無しさん (ワッチョイ 1a68-Mp6C)
2018/04/23(月) 23:18:02.49ID:YIxEn5Qs0 いまだ関数ポインタが使いこなせないんだけどやばいかな?
254デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/23(月) 23:20:18.71ID:reOPAGg30 考えたらjoinの問題じゃないか
もし「単なる加算処理」が1スレッドでメモリ帯域使い潰していたらマルチスレッドにしてもどうしようもないのは明らかだよ
もし「単なる加算処理」が1スレッドでメモリ帯域使い潰していたらマルチスレッドにしてもどうしようもないのは明らかだよ
255デフォルトの名無しさん (ワッチョイ 0e8a-fvqh)
2018/04/23(月) 23:21:31.95ID:reOPAGg30 >>253
未だに関数ポインタなんて使ってるほうがやばい
未だに関数ポインタなんて使ってるほうがやばい
256デフォルトの名無しさん (ワッチョイ 5b9b-Th9u)
2018/04/23(月) 23:30:05.62ID:1JtTwXqR0 画像処理で合成処理をパラメータでもらう場合があるんだが
その場合内部処理と対応させるために関数ポインタは使うが
そういうのもダメ?
その場合内部処理と対応させるために関数ポインタは使うが
そういうのもダメ?
257デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/23(月) 23:35:26.41ID:reOPAGg30 ダメってわけじゃないけどさあw
C++ならもっと柔軟性のあるやりかたが幾らでもあるってこと
C++ならもっと柔軟性のあるやりかたが幾らでもあるってこと
258デフォルトの名無しさん (ワッチョイ 2350-Incm)
2018/04/23(月) 23:36:21.76ID:lnjW6wzS0 virtual関数もラムダ式も関数ポインタ
259デフォルトの名無しさん (ワッチョイ 8a7e-H4fB)
2018/04/23(月) 23:40:33.42ID:awXEdMZR0 std::byteが邪魔すぎるんですけどg++で無効にするオプションってありますかね?
260デフォルトの名無しさん (ブーイモ MM67-BC+p)
2018/04/23(月) 23:50:59.76ID:9sQDUnnSM261デフォルトの名無しさん (ワッチョイ 2304-+3cQ)
2018/04/23(月) 23:51:42.53ID:gZ/aKTVF0262デフォルトの名無しさん (ワッチョイ 7acb-BC+p)
2018/04/24(火) 00:06:39.75ID:qFc5rpEV0 >>248
threadcountいくつになってるの?
threadcountいくつになってるの?
263はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH)
2018/04/24(火) 00:06:56.48ID:VhsA5JFS0 忘れがちなことだが std::function は実行時の型を扱う。
画像処理などのようにヘビーな繰返しがあるような場面では関数ポインタを使った場合との間に深刻な速度差が生じることもなくはない。
画像処理などのようにヘビーな繰返しがあるような場面では関数ポインタを使った場合との間に深刻な速度差が生じることもなくはない。
264デフォルトの名無しさん (ワッチョイ 7acb-BC+p)
2018/04/24(火) 00:16:24.07ID:qFc5rpEV0 >>248
関数名からして、一度のreduce処理量は大したことなくて、何度も繰り返し呼んでない?
thread処理に必要な処理量が相対的に無視できなくなってるんじゃね?
スレッドは4本に制限して、各スレッドが処理する量を増やすかスレッドプール式にしては?
関数名からして、一度のreduce処理量は大したことなくて、何度も繰り返し呼んでない?
thread処理に必要な処理量が相対的に無視できなくなってるんじゃね?
スレッドは4本に制限して、各スレッドが処理する量を増やすかスレッドプール式にしては?
265デフォルトの名無しさん
2018/04/24(火) 00:17:16.38 C++だから関数ポインタ使わないとか頭おかしい
関数ポインタのほうが高速かつシンプルに書けるならそちらを選択すべき
関数ポインタのほうが高速かつシンプルに書けるならそちらを選択すべき
266デフォルトの名無しさん (ワッチョイ 8a7e-H4fB)
2018/04/24(火) 00:20:31.80ID:N5/L/OXI0 皆富豪ばかりではない
267デフォルトの名無しさん (ワッチョイ 1a12-/G6U)
2018/04/24(火) 00:26:04.88ID:RoXKv00p0 富豪かどうかはおま環だろ
だから自己申告しないヤツが悪い
なんでこっちがエスパーみたいなことしなきゃいけないんだ
わたくしは教えないがあなたがわたしの環境を忖度しろってか?
ヴァカじゃねえの?
アフォに対してちゃあんと「テメーのスペックはいかほどですか」と尋ねろクズ
富豪かどうかはわからない、それを言わない人間がまず間違い、
それを逆手にとって相手をマウンティングするアフォがいるから話が進まない
だから自己申告しないヤツが悪い
なんでこっちがエスパーみたいなことしなきゃいけないんだ
わたくしは教えないがあなたがわたしの環境を忖度しろってか?
ヴァカじゃねえの?
アフォに対してちゃあんと「テメーのスペックはいかほどですか」と尋ねろクズ
富豪かどうかはわからない、それを言わない人間がまず間違い、
それを逆手にとって相手をマウンティングするアフォがいるから話が進まない
268デフォルトの名無しさん (ワッチョイ 9aeb-FlaZ)
2018/04/24(火) 00:38:30.68ID:Sy+ZRJzm0 関数ポインタの構文の方がかっこいいだろ!
269デフォルトの名無しさん (ラクッペ MMcb-x+X/)
2018/04/24(火) 00:47:04.42ID:hfyVIq8IM どんなスペックだろうと他のソフトがどれだけメモリや処理時間を喰い潰していようと自分の処理はサクッと終わらせたいといつも思う
270デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/24(火) 01:40:17.33ID:2n4xWLsG0271デフォルトの名無しさん (ワッチョイ 9a91-Aj1d)
2018/04/24(火) 03:16:15.83ID:CsMI0xmD0 >>248
調べてみたけどさっぱり判りません。
pthread_joinで各スレッドの終了を待って、その後、集計処理をするというのはごく渡り前の処理に見えるのですが、
何が行けないのでしょうか?
別の方法でスレッドの終了を待たねばならないのでしょうか?
自分勝手デスミア線が、具体的に問題点、改善点を指摘して下さいm(_ _)m。
調べてみたけどさっぱり判りません。
pthread_joinで各スレッドの終了を待って、その後、集計処理をするというのはごく渡り前の処理に見えるのですが、
何が行けないのでしょうか?
別の方法でスレッドの終了を待たねばならないのでしょうか?
自分勝手デスミア線が、具体的に問題点、改善点を指摘して下さいm(_ _)m。
272デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/24(火) 03:31:10.06ID:2n4xWLsG0 いいから「単なる加算処理」全部見せろよこの包茎野郎
273デフォルトの名無しさん (ワッチョイ 9a91-Aj1d)
2018/04/24(火) 03:56:33.85ID:CsMI0xmD0 threadFunctionが、
void* CalcBasicStatics( void* threadArg ) {
BasicStaticsThreadArg* arg = reinterpret_cast< BasicStaticsThreadArg* >( threadArg );
double intervalOfX = arg->intervalOfX;
double x = arg->dividedRangeOfX.start;
double sumOfY = 0.0;
double sampleCount = 0;
const sc::Sampler& f = arg->f;
while ( x <= arg->dividedRangeOfX.end ){
double y = f( x );
sumOfY += y;
sampleCount++;
x += intervalOfX;
}
arg->sumOfY = sumOfY;
arg->sampleCount = sampleCount;
return nullptr;
}
joinFunctionが、
void CalcBasicStaticsJoin( std::vector< BasicStaticsThreadArg >& args ) {
double sampleCount = 0.0;
double sumOfY = 0.0;
for ( int i = 0; i < args.size(); ++I ) {
sumOfY += args[ i ].sumOfY;
sampleCount += args[ i ].sampleCount;
}
for ( int i = 0; i < args.size(); ++i ) { // 結果を書き込み
BasicStaticsThreadArg& arg = args[ i ];
arg.average = sumOfY / sampleCount;
}
}
です。細々すみません。
void* CalcBasicStatics( void* threadArg ) {
BasicStaticsThreadArg* arg = reinterpret_cast< BasicStaticsThreadArg* >( threadArg );
double intervalOfX = arg->intervalOfX;
double x = arg->dividedRangeOfX.start;
double sumOfY = 0.0;
double sampleCount = 0;
const sc::Sampler& f = arg->f;
while ( x <= arg->dividedRangeOfX.end ){
double y = f( x );
sumOfY += y;
sampleCount++;
x += intervalOfX;
}
arg->sumOfY = sumOfY;
arg->sampleCount = sampleCount;
return nullptr;
}
joinFunctionが、
void CalcBasicStaticsJoin( std::vector< BasicStaticsThreadArg >& args ) {
double sampleCount = 0.0;
double sumOfY = 0.0;
for ( int i = 0; i < args.size(); ++I ) {
sumOfY += args[ i ].sumOfY;
sampleCount += args[ i ].sampleCount;
}
for ( int i = 0; i < args.size(); ++i ) { // 結果を書き込み
BasicStaticsThreadArg& arg = args[ i ];
arg.average = sumOfY / sampleCount;
}
}
です。細々すみません。
274デフォルトの名無しさん (ワッチョイ 8723-wmjz)
2018/04/24(火) 05:46:22.80ID:vHj8ybNt0 そのコード見ても
並列度もスレッドあたりのサンプル数も
1サンプルあたりのコスト(f)もわからないので
まるで意味がない
2または4並列で、1スレッドあたり1〜10Mサンプルくらい処理するようにすれば
速くなるか少なくともスレッドを使わない場合より遅くならないと思う
同じ速度ということはメモリ帯域が律速なのかもね
並列度もスレッドあたりのサンプル数も
1サンプルあたりのコスト(f)もわからないので
まるで意味がない
2または4並列で、1スレッドあたり1〜10Mサンプルくらい処理するようにすれば
速くなるか少なくともスレッドを使わない場合より遅くならないと思う
同じ速度ということはメモリ帯域が律速なのかもね
275デフォルトの名無しさん (ワッチョイ 8723-wmjz)
2018/04/24(火) 05:46:49.67ID:vHj8ybNt0 同じ速度
↓
スレッドを使わない場合と同じ速度
↓
スレッドを使わない場合と同じ速度
276デフォルトの名無しさん (ワッチョイ 8723-wmjz)
2018/04/24(火) 05:55:18.81ID:vHj8ybNt0 fでメモリのどっかから数値を読んでいるんだと思うけど、
これがなるべく連続したアクセス(局所化を謀る)になるようにループを構成できれば速くなるかもしれない。
この辺りはググれば色々参考になるページがあると思うが
いまググッたらそれらしいページがあったので書いておく
http://myoga.web.fc2.com/prog/cpp/opti02.htm
仕様として外からfが与えられるなら無理な話かもしれない。
もちろん interval が 1 で f(x) が { return v[x]; } のような最適なケースよりは速くならないので
その辺りは無駄な努力をしないよう測っておきましょう。
これがなるべく連続したアクセス(局所化を謀る)になるようにループを構成できれば速くなるかもしれない。
この辺りはググれば色々参考になるページがあると思うが
いまググッたらそれらしいページがあったので書いておく
http://myoga.web.fc2.com/prog/cpp/opti02.htm
仕様として外からfが与えられるなら無理な話かもしれない。
もちろん interval が 1 で f(x) が { return v[x]; } のような最適なケースよりは速くならないので
その辺りは無駄な努力をしないよう測っておきましょう。
277デフォルトの名無しさん (ワッチョイ 2350-Incm)
2018/04/24(火) 06:54:08.05ID:RDzdLFpT0 fの中身が公開出来るなら公開して
複数あるならそのうちの1個でいいから
あと、
1回のthreadFunctionで何個くらいfを計算する?
複数あるならそのうちの1個でいいから
あと、
1回のthreadFunctionで何個くらいfを計算する?
278デフォルトの名無しさん (スップ Sd5a-wOeC)
2018/04/24(火) 09:24:50.43ID:jHZYDUEYd >>250
joinについて勉強しろとか偉そうに言ってたのは何だったの
joinについて勉強しろとか偉そうに言ってたのは何だったの
279デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/24(火) 18:12:35.67ID:2n4xWLsG0280デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/24(火) 18:15:41.14ID:2n4xWLsG0 fやら具体的なargsの内容やら処理時間測定のやりかたも記述されてないし
んなもの誰も答えられるかよ
んなもの誰も答えられるかよ
281デフォルトの名無しさん (スップ Sd5a-wOeC)
2018/04/24(火) 18:32:28.83ID:6+u8wIQpd282デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/24(火) 18:41:27.90ID:2n4xWLsG0 >>281
本当に「明らかに」だと思ってるの?バカですか?
本当に「明らかに」だと思ってるの?バカですか?
283デフォルトの名無しさん (ワッチョイ 237f-9jjH)
2018/04/24(火) 18:45:24.94ID:cOEBcXkN0 サンプルレベルのJoinの使い方をみて
「アハハハハ!ジョークのつもりかなんか?そうじゃないならjoinの動きを勉強しろ」
は流石に笑ってしまう
「アハハハハ!ジョークのつもりかなんか?そうじゃないならjoinの動きを勉強しろ」
は流石に笑ってしまう
284デフォルトの名無しさん (ワッチョイ 0e8a-HDkP)
2018/04/24(火) 18:47:53.38ID:2n4xWLsG0 勝手に笑ってればw
285デフォルトの名無しさん (アウアウウー Sa47-9jjH)
2018/04/24(火) 18:49:15.43ID:Z9G2Fq/Ha cin で、個数の決まっていない整数たちを読み込みたいのですが、どうすればいいでしょうか?
整数たちの個数 n が分かっていれば、以下のように読み込めばいいですが。。。
vector<int> v;
int i;
for (int i = 0; i < n; ++i) {
cin >> i
v.push_back(i)
}
整数たちの個数 n が分かっていれば、以下のように読み込めばいいですが。。。
vector<int> v;
int i;
for (int i = 0; i < n; ++i) {
cin >> i
v.push_back(i)
}
286デフォルトの名無しさん (ブーイモ MM26-BC+p)
2018/04/24(火) 18:59:54.20ID:lGEjd9Z7M287デフォルトの名無しさん (ワッチョイ 2393-MaWf)
2018/04/24(火) 19:02:18.64ID:of0BgjlM0288デフォルトの名無しさん (アウアウウー Sa47-9jjH)
2018/04/24(火) 19:15:13.81ID:Z9G2Fq/Ha >>287
ありがとうございました。
別の質問なのですが、一般的に、vectorの使用頻度というのはどれくらいでしょうか?
配列でやれることもすべて vector を使ってやるという人は多いでしょうか?
それとも、効率などを考えて配列で極力済ませるという人が多いでしょうか?
もちろん、ケースバイケースでしょうけれども、そのあたりの常識がないので、大体
どんな感じなのかが知りたいです。
ありがとうございました。
別の質問なのですが、一般的に、vectorの使用頻度というのはどれくらいでしょうか?
配列でやれることもすべて vector を使ってやるという人は多いでしょうか?
それとも、効率などを考えて配列で極力済ませるという人が多いでしょうか?
もちろん、ケースバイケースでしょうけれども、そのあたりの常識がないので、大体
どんな感じなのかが知りたいです。
289デフォルトの名無しさん (アウアウウー Sa47-9jjH)
2018/04/24(火) 19:17:35.43ID:Z9G2Fq/Ha 自分としては、効率など細かいことは考えずに、vectorを使って問題ない
場面ではvectorを使うという風にしたいのですが。。。
vectorを使っても速度などの点で問題ない場合、一般的なプログラマーなら
どうするのかが知りたいです。
場面ではvectorを使うという風にしたいのですが。。。
vectorを使っても速度などの点で問題ない場合、一般的なプログラマーなら
どうするのかが知りたいです。
290デフォルトの名無しさん (アウアウウー Sa47-9jjH)
2018/04/24(火) 19:20:20.45ID:Z9G2Fq/Ha vector<int> v;
int n;
cin >> n;
int t;
for (int i = 0; i < n; ++i) {
cin >> t;
v.push_back(t);
}
int *p;
int n;
cin >> n;
p = new int[n];
for (int i = 0; i < n; ++i) {
cin >> p[i];
}
どちらにするのが普通なのかの常識がありません。
int n;
cin >> n;
int t;
for (int i = 0; i < n; ++i) {
cin >> t;
v.push_back(t);
}
int *p;
int n;
cin >> n;
p = new int[n];
for (int i = 0; i < n; ++i) {
cin >> p[i];
}
どちらにするのが普通なのかの常識がありません。
291片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3)
2018/04/24(火) 19:30:42.86ID:Eukzbh8yd >>290
生のnew/deleteは、なるべく使わないのがいい。delete忘れ、例外などでバグの元や維持コストになる。
生のnew/deleteは、なるべく使わないのがいい。delete忘れ、例外などでバグの元や維持コストになる。
292デフォルトの名無しさん (アウアウウー Sa47-9jjH)
2018/04/24(火) 19:33:20.39ID:Z9G2Fq/Ha293片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3)
2018/04/24(火) 19:36:23.45ID:Eukzbh8yd294デフォルトの名無しさん (ワッチョイ b67f-KMMs)
2018/04/24(火) 19:38:54.99ID:t8t5TswZ0 >>290
上だったらv.reserve(n)しておこう
上だったらv.reserve(n)しておこう
>>289
私は書き始めは std::vector を専ら使っており、後で他のコンテナに換えています
私は書き始めは std::vector を専ら使っており、後で他のコンテナに換えています
296デフォルトの名無しさん (スップ Sd5a-Incm)
2018/04/24(火) 19:46:25.46ID:UxTdQ3KXd >>293
コード読めないの?
コード読めないの?
297片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3)
2018/04/24(火) 19:51:37.43ID:Eukzbh8yd >>296
普通の人間なら、文脈を読み取れるけど、俺はコンピューターに近いんだ。
普通の人間なら、文脈を読み取れるけど、俺はコンピューターに近いんだ。
298はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH)
2018/04/24(火) 20:04:19.79ID:VhsA5JFS0 >>289
実用上の問題が無いことがわかっている範囲内であれば、
深く考えずに vector だけで乗り切るのも悪い選択じゃないと思うよ。
ただ、使い分けることで意図を表現しやすい。
たとえば list を使っていれば要素の挿入や削除が頻繁なデータなんだなって思うし、
array が使われていれば要素の個数が固定なんだなって思う。
速度的に影響がない程度の規模であっても、
それが適しているような操作をこれからするのだという意思表明は人間がプログラムを読むときのヒントになる。
そして、そういうヒントは書いている途中にこそ必要なものなので、 >>295 のように後から整理していくスタイルは個人的には好きじゃないな。
実用上の問題が無いことがわかっている範囲内であれば、
深く考えずに vector だけで乗り切るのも悪い選択じゃないと思うよ。
ただ、使い分けることで意図を表現しやすい。
たとえば list を使っていれば要素の挿入や削除が頻繁なデータなんだなって思うし、
array が使われていれば要素の個数が固定なんだなって思う。
速度的に影響がない程度の規模であっても、
それが適しているような操作をこれからするのだという意思表明は人間がプログラムを読むときのヒントになる。
そして、そういうヒントは書いている途中にこそ必要なものなので、 >>295 のように後から整理していくスタイルは個人的には好きじゃないな。
>>298
>それが適しているような操作をこれからするのだ
うーむ、いろいろと考えさせられます
std::vector でなら使えても、std::list では使えない、というのはあるから、最初からそれを考慮しておくのは…よくありますねえ
>それが適しているような操作をこれからするのだ
うーむ、いろいろと考えさせられます
std::vector でなら使えても、std::list では使えない、というのはあるから、最初からそれを考慮しておくのは…よくありますねえ
300デフォルトの名無しさん (ワッチョイ 9a23-wmjz)
2018/04/24(火) 20:43:20.11ID:Ukt80uX+0 vector は list に比べた場合、
データがメモリ上隣接して並んでいるので
→そういう引数を要する各種 API にそのまま渡せる
→メモリアクセスが局所的にできてキャッシュが効く
予約領域を拡張する場合にのみアロケータが呼ばれるので追加時のアロケータによるオーバーヘッドが低い
とかの良い特性もあるので要素のコピーが軽くて個数が小さいものはvectorにして損することは少ない
データがメモリ上隣接して並んでいるので
→そういう引数を要する各種 API にそのまま渡せる
→メモリアクセスが局所的にできてキャッシュが効く
予約領域を拡張する場合にのみアロケータが呼ばれるので追加時のアロケータによるオーバーヘッドが低い
とかの良い特性もあるので要素のコピーが軽くて個数が小さいものはvectorにして損することは少ない
301デフォルトの名無しさん (ワッチョイ b704-9jjH)
2018/04/24(火) 21:34:54.87ID:JVcrtulg0 BidirectionalIteratorとRandomAccessIteratorだろ
規格用語で言えば短く済む
規格用語で言えば短く済む
302デフォルトの名無しさん (ワッチョイ 36e7-8q6u)
2018/04/24(火) 22:35:44.34ID:iCiOyu8i0 std::listはメモリ局所性がないので今どきのマシンだとクソ遅い
積極的に使う理由は基本的にない
積極的に使う理由は基本的にない
303デフォルトの名無しさん (ワッチョイ 2350-Incm)
2018/04/24(火) 23:33:49.11ID:RDzdLFpT0 積極的にって...
使いどころで使うための物だよ
使いどころで使うための物だよ
304デフォルトの名無しさん (ワッチョイ 9a34-lUQu)
2018/04/24(火) 23:51:07.95ID:z/eaD8m90 メリットとデメリットを見極められないとコンテナを使いこなすのは難しい
昔から配列を弄り倒している古参にとってはこんなに便利な物はないと思うがね
90年初頭辺りにタイムスリップして実際に構造を真似てフルスクラッチでテンプレートなんぞなかった世界で組んでみればコンテナの挙動は自ずと理解できると思うが時代がわるかったな
今は何も苦労しなくても容易になんでも手に入る世界だからな
修業が足らんよ青二才
昔から配列を弄り倒している古参にとってはこんなに便利な物はないと思うがね
90年初頭辺りにタイムスリップして実際に構造を真似てフルスクラッチでテンプレートなんぞなかった世界で組んでみればコンテナの挙動は自ずと理解できると思うが時代がわるかったな
今は何も苦労しなくても容易になんでも手に入る世界だからな
修業が足らんよ青二才
305デフォルトの名無しさん (ワッチョイ 36e7-8q6u)
2018/04/24(火) 23:55:55.63ID:iCiOyu8i0 >>303
その使い所がよほど特殊な状況以外にないんだよ
その使い所がよほど特殊な状況以外にないんだよ
306デフォルトの名無しさん (ワッチョイ e3b3-9jjH)
2018/04/24(火) 23:58:59.30ID:4OXNJpQB0 大規模C++ソフトウェアデザインという本を読んでいます。
冗長インクルードガードが紹介されているのですが、効果あるんですかね。
古めの本なのですが、最近のコンパイラだと意味ないですかね
冗長インクルードガードが紹介されているのですが、効果あるんですかね。
古めの本なのですが、最近のコンパイラだと意味ないですかね
307>>306 (ワッチョイ e3b3-9jjH)
2018/04/25(水) 00:13:26.67ID:2lHeUIKm0308デフォルトの名無しさん (ワッチョイ 2304-+3cQ)
2018/04/25(水) 00:14:20.28ID:MdUECE2K0 #pragma once って規格化されたんだっけ?
309デフォルトの名無しさん (ワッチョイ 36e7-8q6u)
2018/04/25(水) 01:03:31.17ID:YD2+CY860 されてない
しようしようと20年言われ続けて技術的な問題でできずにいる
しようしようと20年言われ続けて技術的な問題でできずにいる
310デフォルトの名無しさん (ワッチョイ 9a91-7Gvz)
2018/04/25(水) 02:07:21.83ID:/kuz3CrQ0 243です。
アドバイスを頂き検討したのですが、メモリが散らかっているのが原因と判断しました。
都合により細々とした実装の話は割愛しますが、付き合ってくれた皆さんありがとうございました。
アドバイスを頂き検討したのですが、メモリが散らかっているのが原因と判断しました。
都合により細々とした実装の話は割愛しますが、付き合ってくれた皆さんありがとうございました。
311デフォルトの名無しさん (ワッチョイ 8a7e-H4fB)
2018/04/25(水) 02:33:10.54ID:wwssDiVV0 どおりで未だに警告でるわけだ
312デフォルトの名無しさん (ワッチョイ 2350-Incm)
2018/04/25(水) 06:26:59.61ID:8qaCWrbS0 >>305
その特殊な状況の為にlistが存在する
私の場合は特殊なプログラムを書くことが多いので
使いどころは多いのかもしれない
また、普通の組み込みC言語でも簡易な片方向リストとかを使ったりする (C++じゃないのでlistは無い)
その特殊な状況の為にlistが存在する
私の場合は特殊なプログラムを書くことが多いので
使いどころは多いのかもしれない
また、普通の組み込みC言語でも簡易な片方向リストとかを使ったりする (C++じゃないのでlistは無い)
313デフォルトの名無しさん (ドコグロ MMcb-cuLp)
2018/04/25(水) 07:15:49.01ID:ntbHaYzVM314デフォルトの名無しさん (アウアウカー Sa43-2MBd)
2018/04/25(水) 07:30:39.44ID:kzCoHflQa 今はモジュールの方を標準化しようとしてるんじゃ
315デフォルトの名無しさん (ワッチョイ 8a7e-H4fB)
2018/04/25(水) 08:47:25.49ID:wwssDiVV0 偉い人が考えてることはわからん
316デフォルトの名無しさん (ワッチョイ 0e76-9jjH)
2018/04/25(水) 11:24:32.26ID:iscLTfMY0 >>313
プリプロセッサは C++ じゃないからね
C++ 以外の言語と共有しているツールなので
それらと歩調を合わせる必要があるし
プリプロセッサだけ独立の規格にするなら
C++ を含め、諸言語の規格も
プリプロセッサのバージョンとどう付き合うのか
策定せにゃならん
プリプロセッサは C++ じゃないからね
C++ 以外の言語と共有しているツールなので
それらと歩調を合わせる必要があるし
プリプロセッサだけ独立の規格にするなら
C++ を含め、諸言語の規格も
プリプロセッサのバージョンとどう付き合うのか
策定せにゃならん
317デフォルトの名無しさん (ドコグロ MMcb-cuLp)
2018/04/25(水) 12:23:57.05ID:ntbHaYzVM318はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH)
2018/04/25(水) 15:37:25.53ID:7Yqb38x00 現行では、 #include ディレクティブは「対象ファイルの内容がそこに書かれているかのようにふるまう」という規則なので、
ヘッダファイル内のプラグマ (#pragma once) の解釈が始まるのはインクルードされた後になる。
もちろん対象範囲がコンパイル単位全体に及んでしまっては #pragma once の意味がないが、
現状の仕様に辻褄を合わせるとそうなる。
実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、
#pragma once を仕様に入れるのに #pragma once の項目を追加すれば済むわけではないってことは理解してくれ。
それと、プリプロセッサの仕様は C/C++ の一部なのは確かだが、
挙動を規定しきれていないのじゃないかということは指摘されている。
https://qiita.com/ruiu/items/4d471216b71ab48d8b74#3%E6%9C%8817%E6%97%A5
うやむやでやってきてるところを整理する必要は有ると思う。
>>317
Haskell (GHC) は C プリプロセッサを使うよ。
汎用的に使いたいなら M4 とかの方がいいとは思うけど、
Cプリプロセッサに慣れている人は多いから……。
ヘッダファイル内のプラグマ (#pragma once) の解釈が始まるのはインクルードされた後になる。
もちろん対象範囲がコンパイル単位全体に及んでしまっては #pragma once の意味がないが、
現状の仕様に辻褄を合わせるとそうなる。
実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、
#pragma once を仕様に入れるのに #pragma once の項目を追加すれば済むわけではないってことは理解してくれ。
それと、プリプロセッサの仕様は C/C++ の一部なのは確かだが、
挙動を規定しきれていないのじゃないかということは指摘されている。
https://qiita.com/ruiu/items/4d471216b71ab48d8b74#3%E6%9C%8817%E6%97%A5
うやむやでやってきてるところを整理する必要は有ると思う。
>>317
Haskell (GHC) は C プリプロセッサを使うよ。
汎用的に使いたいなら M4 とかの方がいいとは思うけど、
Cプリプロセッサに慣れている人は多いから……。
319デフォルトの名無しさん (ワッチョイ 0e76-9jjH)
2018/04/25(水) 16:38:46.53ID:iscLTfMY0 また別な話
#includeしようとしているファイルが
過去に#includeしたファイルと同一かどうか
という判定も意外に厄介だね
ハードリンクできるファイルシステムと
そうでないファイルシステムがあったりするし
ハッシュが一致しても衝突かどうかの問題もある
#includeしようとしているファイルが
過去に#includeしたファイルと同一かどうか
という判定も意外に厄介だね
ハードリンクできるファイルシステムと
そうでないファイルシステムがあったりするし
ハッシュが一致しても衝突かどうかの問題もある
320はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-9jjH)
2018/04/25(水) 18:09:25.23ID:7Yqb38x00 ハードリンク、シンボリックリンクが無いファイルシステムだったとしても、サーチパスの問題も思いつくな。
たとえばカレントディレクトリと、カレントディレクトリ直下の foo ディレクトリからヘッダファイルを探すようになっているとき、
#include "bar.h"
と
#include "foo/bar.h"
は同じファイルを指しているが、表現が異なる。
同一のファイルとして除去すべきだろうか?
たとえばカレントディレクトリと、カレントディレクトリ直下の foo ディレクトリからヘッダファイルを探すようになっているとき、
#include "bar.h"
と
#include "foo/bar.h"
は同じファイルを指しているが、表現が異なる。
同一のファイルとして除去すべきだろうか?
321デフォルトの名無しさん (スップ Sd5a-Incm)
2018/04/25(水) 19:34:37.54ID:ch3bizaad #if ****
#pragma once
#endif
とかどうなるの?
複数回のインクルードで条件がちがっていたら?
#pragma once
#endif
とかどうなるの?
複数回のインクルードで条件がちがっていたら?
322デフォルトの名無しさん (ドコグロ MMcb-cuLp)
2018/04/25(水) 20:33:35.69ID:ntbHaYzVM >>318
> 実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、
規定すればいいだけだろ?
どこに技術的な問題があるんだ?
政治的な問題だと言うならまだしも
>>319-320みたいな話は処理系定義ですむ話
>>321は少し悩ましいがそもそも途中まで読んでから#pragma onceとか言われても面倒だから書くならファイルの最初に書けとかの制限をつければいい
> 挙動を規定しきれていないのじゃないかということは指摘されている。
いやいや、その子ちゃんと規格読めてないだけでしょ w
> Haskell (GHC) は C プリプロセッサを使うよ。
仕様を流用してるだけでしょ?
何かのコンパイラと共有してるわけじゃないと思うが
> 実装した処理系がもうあるんだから実装に沿うように規定しなおすってことはできなくは無いんだろうが、
規定すればいいだけだろ?
どこに技術的な問題があるんだ?
政治的な問題だと言うならまだしも
>>319-320みたいな話は処理系定義ですむ話
>>321は少し悩ましいがそもそも途中まで読んでから#pragma onceとか言われても面倒だから書くならファイルの最初に書けとかの制限をつければいい
> 挙動を規定しきれていないのじゃないかということは指摘されている。
いやいや、その子ちゃんと規格読めてないだけでしょ w
> Haskell (GHC) は C プリプロセッサを使うよ。
仕様を流用してるだけでしょ?
何かのコンパイラと共有してるわけじゃないと思うが
323デフォルトの名無しさん (ワッチョイ 36e7-8q6u)
2018/04/25(水) 20:43:06.43ID:YD2+CY860 君よりよっぽど賢い人達が20年間悩み続けて未だに出来てないことを舐めない方がいい
324デフォルトの名無しさん (ドコグロ MMcb-cuLp)
2018/04/25(水) 21:22:23.29ID:ntbHaYzVM325デフォルトの名無しさん (ワッチョイ 36e7-8q6u)
2018/04/25(水) 21:47:31.85ID:YD2+CY860 新規格の季節になると毎回のように標準化委員会の議題に上がってるんだが?
326デフォルトの名無しさん (アウアウウー Sa47-Mp6C)
2018/04/25(水) 22:20:34.77ID:fPsUNFh1a モジュール方式になったらヘッダファイルが要らなくなる?
327デフォルトの名無しさん (ワッチョイ 0e76-9jjH)
2018/04/25(水) 22:28:42.99ID:iscLTfMY0 >>322
> 処理系定義ですむ話
それはおかしいでしょ
ハードリンクできる処理系からできない処理系に移植したtarボールの
#includeの挙動が未規定なら結局インクルードガードを自前で書くことになる
> 処理系定義ですむ話
それはおかしいでしょ
ハードリンクできる処理系からできない処理系に移植したtarボールの
#includeの挙動が未規定なら結局インクルードガードを自前で書くことになる
328デフォルトの名無しさん (ワッチョイ 9ab3-cuLp)
2018/04/25(水) 22:48:43.95ID:7S1PATFb0329デフォルトの名無しさん (ワッチョイ 9a34-lUQu)
2018/04/25(水) 22:55:12.61ID:eMzyfy/H0 #pragma once なんて
once upon a time だぜ
今はもうだれも気に留めてやしねぇ
once upon a time だぜ
今はもうだれも気に留めてやしねぇ
330デフォルトの名無しさん (ワッチョイ 0e76-9jjH)
2018/04/25(水) 23:31:56.94ID:iscLTfMY0 アホの相手は疲れたわ
もう寝る
もう寝る
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- (´・ω・`)クリスマスが今年もやってくる~
- 【悲報】ジャップ、日中戦争に賛成が5割弱...軍歌の音が聞こえる... [856698234]
- 千晴さん千晴さん
- 晃←コレの読み方wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 俺も猫か犬と布団で寝たい
- 【乞食速報】プロクオリティ ビーフカレー 96食 4262円 [268244553]
