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


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

【初心者歓迎】C/C++室 Ver.37【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:29:45 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.36【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1175436073/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


367 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:56:39 ]
>>363
とりあえず、データが一杯の時に
「どういう動きにしたいのか」
「実際はどういう動きをするのか」
を、まとめてみるのはどうだろうか

368 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 04:20:25 ]
友愛数を探すプログラム

「博士が愛した数式」で出てきた友愛数
友愛数の定義
ja.wikipedia.org/wiki/%E5%8F%8B%E6%84%9B%E6%95%B0
Aの約数の和=B、Bの約数の和=Aのとき、A、Bは友愛数である
(ただし約数には自分自身を含めない)
例:220と284
220の約数の和=1+2+4+5+10+11+20+22+44+55+110=284
284の約数の和=1+2+4+71+142=220

とりあえず1,000,000まで探してみた。39組あった。
オイラーは60余り見つけたらしい。

が、いかんせん遅すぎる。(Athlon64 3500+で33分)
誰か高速化してくださいな。
ソース:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4009.txt

高速化のポイント
・約数をもっとスマートに見つける方法はないか?(これがかなり遅い)
・10の約数の和が100になるわけないので本探索のjのループに無駄が多い
  かといって、どこまではしょっていいかわからない j = i / 2 〜 とか?
・あ、jをループにするから遅いんだ。yakuwaをソートして二分木探索すればいいんだ

369 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 06:55:55 ]
100まで求めるやつらしい
ttp://www.saoyagi.net/integer/konyaku.html

370 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 08:28:32 ]
Aという起動中のプログラム(既存)のウィンドウを、Bというプログラム(自作)から開きたいです。
できるだけ簡単に開く場合はどんな方法がありますか?(SendMessage?)
Aのウィンドウはメニューから開くタイプでアクセラレータキーは付いていません。

371 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 08:39:58 ]
std::vectorについて質問です。

#include <vector>

template <class T>
class test{
public:
test(T a){ data.resize(1); data[0] = a; }
const T& getData() const{ return data[0]; }
private:
std::vector <T> data;
};

int main()
{
test <bool> a(true);
a.getData();

test <int> b(0);
b.getData();

return 0;
}

boolで初期化された方にはVC8、GCC3.4共に、テンポラリのリファレンスを返すと怒られてしまいます。
boolとintでどのような違いがあるのでしょうか?
識者の方、ご教授お願いします。


372 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 09:06:18 ]
>>371
Effective C++第18項

vector<bool>の返す型はbool*ではなくvector<bool>::reference型だから
参照は返せない。だから値で返すしかない。

const T& → const T

内部でプロキシオブジェクトを使っているのでアドレスが取れないため。

373 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 09:06:47 ]
×Effective C++
○Effective STL

374 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 10:47:19 ]
なるほど、vector< bool >にそんな事情があったとは。
const T& → const T にすると、vectorの中身によっては、
コピーが馬鹿にならない場合もあるので、この制約は嫌らしいですね。


375 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 11:02:00 ]
>>374
一応補足しておくと、
const T となるのは vector<bool> ’のみ’ね



376 名前:デフォルトの名無しさん [2007/05/20(日) 11:15:08 ]
コピーが気になるなら、boost::call_traitsみたいな感じで
適切な戻り値の型を選ぶようにすればいいんじゃないかな。

377 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 12:06:05 ]
>>370
C/C++、関係ナクネ?

プログラムAがどういう実装で新しいWindowを生成してるか
分からないとBからじゃ無理だと思うけど。

378 名前:370 mailto:sage [2007/05/20(日) 12:31:22 ]
分かりにくくてすみません。

プログラムAはWindowsアプリケーションで、
TrackPopupMenu(ショートカットメニュー)からCreateWindowExでウィンドウを開いているようです。
プログラムBはC++(またはC)で作ります。

379 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 12:36:19 ]
もうちょい詳しく。
てか、APIスレ行こうぜ

380 名前:デフォルトの名無しさん [2007/05/20(日) 12:49:15 ]
WM_COMMANDとメニューIDを
SendMessageで送りつければいいんじゃないの?

381 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 15:14:38 ]
VC++のリストボックスについて、行き詰ってしまいまして、質問させて下さい。

環境はeMbedded Visual C++ 4.0 / windows CE です。
リストボックスにあるスクロールバーを使用せずに、別スクロールを付加させて、
リストボックスの動きを制御させています。
垂直スクロールに関しては、リスト数を取得して、スクロールバーで制御が出来るのですが、
水平スクロールがうまくいきません。。
リストボックス内では、文字列が途中までしか表示されておらず、
水平方向専用のスクロールバーを付加したのですが、
リスト内における表示位置(文字列の表示位置について)が取得&設定出来れば、
擬似スクロールが可能かな、と思ったのですが、取得することが出来ませんでした。
例えば、リストに水平スクロールをつけてしまい、そのスクロール部分を隠してしまい、
別スクロールから操作しているように見せかける、ということも考えたのですが、
その場合のリストについている水平スクロールの表示位置も取得できず。。。

もしかしたら、リストのスクロール位置が取得出来る方法があるのかもしれませんが、
申し訳ないのですが、調べたのですが、いまいち、探すことが出来ませんでした。
何かいい関数や処理がないかなぁ、、と行き詰っている状態です。
どなたか、いい方法をご存知の方がいらっしゃいましたら、教えていただけますでしょうか。
よろしくお願い致します。

追伸:もし、VC自体にそのような関数や処理方法がないのであれば、
別リスト(コピーリスト)を用意して、表示の仕方で擬似スクロールするように
見せかけるしかないのかなぁ。。。と悩み中です。。

382 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 15:56:47 ]
switch文のcase句の条件を(ほぼ)同時に満たしたら下記の場合どうなるんでしょうか?

int nCount;
switch (a)
{
case1:
 nCount=0
 break;
case2:
 nCount=1
 break;
}


383 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:01:29 ]
>>382
switchを通った時点の数値で評価される

384 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:01:57 ]
一回で評価される式は1つ
つまりほぼ同時に満たすと言うのは
a == 0x01 && a == 0x02の時
これを満たすようなaは果たして存在するか?

385 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:17:17 ]
switchとifは実行速度の面では一緒ですか?



386 名前:382 mailto:sage [2007/05/20(日) 16:18:06 ]
>>384
case1とcase2をそれぞれ満たす違う値のaがほぼ同時に入ってくるということです。


>>383
でしたら下の場合nCountは3になるんでしょうか?
int nCount=3;
switch (a)
{
case1:
 nCount=0
 break;
case2:
 nCount=1
 break;
}

387 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:23:01 ]
switch通過後にnCountの値が3になるのはaが1でも2でもない場合

388 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:23:04 ]
>>386
>case1とcase2をそれぞれ満たす違う値のaがほぼ同時に入ってくるということです。

      ___    ━┓
    / ―\   ┏┛
  /ノ  (●)\  ・
. | (●)   ⌒)\
. |   (__ノ ̄  |
  \        /
    \     _ノ
    /´     `\
     |       |
     |       |

           ___   ━┓
         / ―  \  ┏┛
        /  (●)  \ヽ ・
       /   (⌒  (●) /
       /      ̄ヽ__) /
.    /´     ___/
    |        \
    |        |


389 名前:デフォルトの名無しさん [2007/05/20(日) 16:23:06 ]
>>368
素数を定数配列で持っとけ。1,000,000までの解を求めるんなら
1,000( == √1,000,000 )以下の素数データがあれば十分。
素数を定数配列使うのが邪道だと思う場合でもせめて素数だと
わかった値はどっかにプールしといて再利用しれ。

390 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:25:09 ]
スコープの問題か
ブロックローカルのa、関数ローカルのa、クラスメンバのa、グローバルのa
と色々あっても優先順位がちゃんと決まってるから入る評価されるaは唯一つだよ

391 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:27:09 ]
volatile変数なんだろ。

392 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:28:09 ]
おーい誰かエスパー呼んで来い

393 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:30:33 ]
まさかとは思って念のため >>382 のコードをコンパイルしてみたが
エラーもワーニングもでなくてワラタ。

>>382
case 1: と case1: じゃ全然意味が違うから気をつけてね♪

394 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:38:05 ]
>>393
case 1のコロンがなくてもGCCでコンパイルできるよ

395 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:41:23 ]
それはない。



396 名前:382 mailto:sage [2007/05/20(日) 16:43:20 ]
混乱させてしまって申し訳ないです。
グローバルフックのコールバック関数で以下のようにしてて、
AとBのウィンドウがあって、Bのウィンドウがアクティブな時にAのウィンドウをアクティブにすれば
BのWA_INACTIVEとAのWA_CLICKACTIVEがほぼ同時に飛んでくるんではないでしょうか?
この場合nCountの値はどうなるんでしょう?

int nCount=0;
case WM_ACTIVATE:
 switch (lp->wParam)
 {
 case WA_ACTIVE:
 case WA_CLICKACTIVE:
  nCount--;
  break;
 case WA_INACTIVE:
  nCount++;
  break;
 }

>>382は文法めちゃくちゃでした。

397 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:47:19 ]
queueがあるから同時じゃないよ

398 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:48:05 ]
>>396
switch文の外にあるcase WM_ACTIVATE: は本当にエラーにならないか?

399 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:50:23 ]
まずWA_INACTIVEが呼ばれて次にWA_CLICKACTIVEが呼ばれる。
つまり
nCount=0;
nCount++;
が実行されてから
nCount=0;
nCount--;
が実行される

400 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:55:31 ]
breakしてるからfall-throughはしないんだろ?

401 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:56:30 ]
>>400
お前さんも質問者の言ってることが解ってないようだが、
質問者はそんなレベルじゃない勘違いをしている。

402 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:00:15 ]
まああれだ、変数(または関数)と値というものの区別がついてないんだな、たぶん

403 名前:382 mailto:sage [2007/05/20(日) 17:05:01 ]
まだいくつか省略してますがどこがおかしいのでしょうか?

>>399
ありがとうございます。見直して成功したら報告させて頂きます。

404 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:40:32 ]
>>385
コンパイラによってはテーブルジャンプにしてくれる場合もあるとか
まぁ環境によるので実測しなさい

405 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:46:27 ]
>>404
それを言うならジャンプテーブルだろ、馬鹿w

それからコンパイラによってはっていうよりそもそも
ジャンプテーブルに変換する為のモンだぞ、switch は。
確かに状況により必ずしもジャンプテーブルになるわけじゃないが。



406 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:58:14 ]
万単位の分岐をelse ifのはしごで書くと
結構はっきり違いが分かるらしい

407 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:02:51 ]
そこまで作るのがここに何人(ry ごめんなさい妬みですorz

408 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:24:51 ]
int型の整数の中に、任意の整数が含まれているか調べる方法ってありますか?
たとえば

int a = 1234;

があって、この中に3という数値が含まれてるかどうか、みたいな感じです。
文字列として扱ってしまえばできそうなのですが、intからcharにキャストすると
どうもおかしくなってしまって・・・

よろしくお願いします

409 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:26:00 ]
sscanf

410 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:26:03 ]
10で割って一桁ずつ見ていけばいいでしょ

411 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:26:56 ]
sprintfしてstrchrで探すとか。

412 名前:410 mailto:sage [2007/05/20(日) 18:27:24 ]
1の位を見るにはa%10

413 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:54:29 ]
>intからcharにキャスト

toString()ではいかんのか?
(Cなら >411 だが)

414 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:55:38 ]
itoa系列の関数を使うといい

415 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:02:24 ]
itoa()は標準関数じゃないよ。



416 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:08:56 ]
ごめんちゃい><

417 名前:408 mailto:sage [2007/05/20(日) 19:15:16 ]
いろいろとどうもです
sprintfの存在を初めて知りました
それで挑戦してダメだったら1桁ずつ見ていきたいと思います

418 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:27:37 ]
速度求めるなら一桁ずつ見る方法の方がいいよなO(N)未満だし

419 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 00:47:05 ]
>>381 です。

なんとか、少しづつ進んでみたのですが・・・。
現状のリストについている水平スクロールの値は取得&設定できました。
でも、設定をすると、リストの水平スクロールは稼動するのですが、
リストは一緒に動いてくれません。
どうしたら、リストも一緒に動いてくれますか?

GetDlgItem(IDC_リストコントロール)->GetScrollRange(SB_HORZ ,&iMin,&iMax);
iTest = GetDlgItem(IDC_リストコントロール)->GetScrollPos(SB_HORZ);
GetDlgItem(IDC_リストコントロール)->SetScrollPos(SB_HORZ,iTest+5,true);

420 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 01:22:53 ]
>>368
>>389
直観的方法だけど、
・必要な素数列を最初に求める。
・1は定義より含まれないことが自明なので2から始める(2も自明のような気がするけど)。
・任意の数の友愛数は二つ以上ないと仮定して(証明されてるのか知らん)、既に友愛数になった数はスルー。
・求めた素数列を使って素因数分解してから組み合わせを網羅して約数列を作る。
・約数列の合計を求めて元の数より小さければその数は既に調べているのでスルー(等しいということはないだろうけど一応含めてスルー)。
・そうでない場合はその数の約数列を作り合計を求めて元の数と比較し、一致していれば友愛数。
ttp://www.geocities.jp/krtcw777/amicable_numbers.txt
この方法だと>>368の環境で1000000まで30分どころか30秒もかからない(と思う。当方Pen4 2.53GHzで28秒)。

421 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 02:10:01 ]
はじめて質問します。よろしくお願いします。
switch文で、int型の特定の値を入力するまで処理を繰り返すものを作っているのですが、
(1、2、のメニュー番号を入力するまで繰り返す、など)
int型(1)ではなく、1.0やaなど指定されたもの以外入力すると
無限ループになってしまい、処理を抜けることができません。
画面に表示された番号以外打ち込むなと言いたいところなのですが…。
これを避けるためにはどのようにcaseを設定したらよいのでしょうか?

よろしくお願いします。

422 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 02:45:59 ]
default:

423 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 02:58:07 ]
www.google.co.jp/search?q=scanf+%E5%95%8F%E9%A1%8C%E7%82%B9

424 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 03:52:32 ]
>>421
switchの前でscanf()を使って入力しているのなら、fgets()+sscanf()に変更してみることお勧め。

425 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 04:17:38 ]
>>368
これで早くなってるはず
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4014.c

C7 600MHz で 30秒



426 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 04:40:48 ]
O(N^2)台のアルゴリズムはまだかね

427 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 05:13:28 ]
>>368
メモリ大量消費版
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4015.c

C7 600MHz で 10秒

428 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 10:11:00 ]
>>368
>>427 のオーバーフロー耐性を強化
yakuwa[i]=yakuwa[i_copy]*(i/i_copy*j-1)/(j-1);

yakuwa[i]=yakuwa[i/j]+yakuwa[i_copy]*(i/i_copy);

429 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:18:08 ]
定数の割り算は、かけ算に自動的に直されてしまうのですか?

430 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 13:23:44 ]
>>429
そんな事はないけど大抵はコンパイラの最適化によってそうなる
理由は割り算よりかけ算の方が大抵のCPUで速いから

431 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 18:08:50 ]
ツリービューコントロール等で項目が選択された場合に、何番目の項目が選択されたか調べたいのです。

WM_NOTIFYメッセージを捕まえて、何番目の項目が選択されているか調べているのですが、どうやら
この方法だとツリービューコントロールが選択される直前に選択されていた項目の値が返ってしま
います。

恐らくWM_NOTIFY以外のウィンドウメッセージを捕まえるべきなのでしょうが、どのメッセージを
捕まえればよいのでしょうか?

432 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 18:14:57 ]
TVN_SELCHANGED

433 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 18:59:00 ]
>>432
ありがとうございます。
しかしTVN_SELCHANGED メッセージはそのままでは取得できないんですね…。
色々と面倒そうですがやってみます。ありがとうございました。

434 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:02:47 ]
WM_NOTIFY を捕まえてるのに、そのままでは取得できないってのは無いだろう。

435 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:21:13 ]
>>434
すみません、リストビューの扱いを間違っていました。
ちゃんとTVN_SELCHANGEDでそのままメッセージを取得できました。
重ね重ねアドバイス感謝します!



436 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:39:11 ]
リストビュー?
ツリービューじゃないのか?

437 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:42:05 ]
あ、ツリービューでした。

438 名前:デフォルトの名無しさん [2007/05/21(月) 20:13:33 ]
class Foo {
public:
 Foo(bar b);
 func();
private
 struct Impl;
 smart_ptr<Impl> pimpl;
};
があった時、インスタンス化されたFoo型のオブジェクトfのfunc()を
関数オブジェクトにしてSTLのアルゴリズムに渡したいんですが
(理由:func()はFooのコンストラクタによって初期化されたメンバpimplを利用する)、
どうすればいいんでしょう?
出来れば関数ポインタではなく関数オブジェクトとして扱いたいです

439 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 20:26:53 ]
boost::function<int ()> f = std::bind1st(std::mem_fun(&Foo::func), that);
だって、boostのチュートリアルに書いてあった

440 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 20:33:21 ]
boost::bind(std::mem_fun(&Foo::func), &f)

441 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 20:37:03 ]
回答ありがとうございます、上手く行きました。
しかしこんな奇怪なコードが通ることについてとても不思議に思います。

442 名前:デフォルトの名無しさん [2007/05/21(月) 21:45:31 ]
質問です。

プログラム初心者の質問なんですが、
プログラム上で指定したフォルダに、ファイルがいくつ格納されているのか?
また、どんな名前のファイルなのか調べる方法はないものでしょうか?

443 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:47:53 ]
あります。

444 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:47:53 ]
あげてしまいました。ごめんなさい。
あと環境はC++です

445 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:48:02 ]
>>442
Windows環境なら、FindFirstFile でぐぐるとよろし



446 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:50:24 ]
>>442
Win32ならFindFirstFile/FindNextFile

447 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:51:59 ]
>>442
Win32APIを使うならFindFirstFile、FindNextFile、FindClose。

448 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:52:44 ]
>>445-446
式は来月あたりですか?

449 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:53:19 ]
<boost/filesystem/operations.hpp>あたり

450 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:53:51 ]
421です。
いただいたヒントとatoiで修正することができました。
どうもありがとうございました。


451 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:57:59 ]
442です

ありがとうございます。
環境はWindowsなので、FindFirstFileでいいようです。
例になるコードもぐぐれたので、なんとかがんばってみます!

452 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 22:01:04 ]
>>439-441
boost::bind なら↓でおk

boost::bind(&Foo::func, _1)

453 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:47:50 ]
>448
全然一致してないじゃん

454 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:57:08 ]
tr1::bindでもいいよ

455 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 02:41:30 ]
二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。
ここでa,b,cは整数、x1,x2は浮動小数とする。

数学の発展課題として出されたのですがさっぱり分かりません。
どなたか手を差し伸べてください・・・orz



456 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 02:43:42 ]
>>455 丸投げは宿題スレ逝け。

457 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 03:05:43 ]
C++の質問なのですが、
配列:123224があるとして、2の要素数だけを取り払い、前詰めをして
配列:134にするには、どのような方法がありますか?
お願いします。

458 名前:457 mailto:sage [2007/05/22(火) 03:13:32 ]
Deleteを使わない方法がありましたら、それをお願いします

459 名前:デフォルトの名無しさん [2007/05/22(火) 03:21:13 ]
Deleteというのが何なのか知らんが、
std::vectorと共通アルゴリズム使えば一発じゃないか?

460 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 03:21:35 ]
>>457-458
配列って std::vector のことか?
結果の要素数が変わってるんで、組み込み配列じゃないんだろう。
だったら remove + erase でいい。

"Delete" って delete 演算子のことか?
new を使ってないなら使うもクソもねーよ。

461 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 03:31:02 ]
>457

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int main(){
int array[] = {1,2,3,2,2,4};
vector<int> vi(array, array+6);

vi.erase(remove(vi.begin(), vi.end(), 2), vi.end());

for(int i=0; i<vi.size(); i++)
cout << vi[i] << ' ';
cout << endl;

return 0;
}

462 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 05:55:58 ]
>>368です

>>389 >>420 >>425 >>427 さん、レスありがとうございます。
素因数分解を使うと手っ取り早く約数が計算できるのですね。
後でwikipediaを見て知りました(汗
あと、本探索部分もいらないループしてましたし。
プログラムを書いていただいたお二方もありがとうございました。
>>427さんのプログラムだと2秒で終わりました!
素因数分解の方法とか、ためになります。(まだ、ちゃんと読めてないですけど)
ありがとうございました。

463 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 06:22:51 ]
うーむ・・こんなにも差が出るもんなんやね・・
アルゴリズムの大切さをあらためて実感した。

464 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 07:48:37 ]
>>462
中学で習うよ・・・

465 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 08:07:40 ]
>>462
約数の和

60 の場合
60= 2^2 * 3^1 * 5^1
(60の約数の和)=(2^0 + 2^1 + 2^2)*(3^0 + 3^1)*(5^0 + 5^1)
=(1+2+4)*(1+3)*(1+5)=168

>>427 のアルゴリズム
60=2^2*15
(60の約数の和)=(15の約数の和)*(2^0 + 2^1 + 2^2)
=(15の約数の和)*(2^3-1)/(2-1)

>>428 のアルゴリズム
60=2^2*15
(60の約数の和)=(15の約数の和)*(2^0 + 2^1 + 2^2)
=(15の約数の和)*(2^0 + 2^1) + (15の約数の和)*2^2
=(30の約数の和) + (15の約数の和)*2^2



466 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 12:56:16 ]
C++で値クラスを作る際に、Cスタイルの構造体を選択した場合、
コンストラクタのオーバーロード
(引数なしでメンバは全てゼロ、または指定引数で初期化といった動作をさせるため)
すること、さらに考えを進めて振る舞い、つまりメンバ関数を持たせることって良くないんでしょうか?

467 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 13:02:16 ]
凸包を調べるためにQhullを使ってるんだけど、頂点配列points[i]から
凸包の外周要素に使われた点の添字を抜き出す方法って無い?

色々やってみたけど、外周要素の点の座標しかもってこれないです。






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

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

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