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


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

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



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

2 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 21:37:35 ]
立ってなかったので立てました。
ついでに自分で2get

3 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 21:38:31 ]


4 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:09:18 ]
乙4ゲット

5 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:09:21 ]
cerr << '>>1乙' << endl;

6 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:12:28 ]
>前スレ1000
releaseしないといけないのが面倒

7 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 23:02:43 ]
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。

8 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 23:27:33 ]
7 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

9 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 01:48:03 ]
>>7
秋刀魚を食べたら
まで読んだ

10 名前:デフォルトの名無しさん [2007/02/20(火) 09:30:57 ]
質問です。
クラスメンバに配列を持っている場合、その初期化はどうすればよいでしょうか?
現在は
class foo{
foo(int *b){
a[0] = b[0];
a[1] = b[1];
}
private:
int a[2];
}

としているのですが、初期化リストで初期化することはできないでしょうか?



11 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 09:38:21 ]
そのやり方が一番無難だと思う。
C++には「これ一発でおk」な方法が無い。

12 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 09:49:00 ]
>>10
配列は初期化リストで初期化できない。

どうしても初期化リストで初期化するのが必要な場合は vector を使うと
可能になる。少し大げさなようだけど、動的確保が一つ追加されるほかは
たいした違いは無い。

class foo{
foo(int *b) : a(&b[0], &b[2]) {}
private:
std::vector<int> a;
}

13 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 13:59:37 ]
配列構造体を渡したいのですが、間違いを指摘してください。
お願いします。
static cardData cD[256];

ReadCastFile(cD);

int ReadCastFile(cardData **cD) {
  cD[0]->cName = (LPSTR)malloc(GetFileSize(hFile , NULL));

}

14 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 14:04:59 ]
*が1個多い。

15 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 14:12:58 ]
>>14
ありがとうございます。

16 名前:デフォルトの名無しさん [2007/02/20(火) 15:31:24 ]
双子素数を求めるプログラムを作成してみたのですが、どこか改善点などあれば教えてください。
#include<iostream>
using namespace std;
const int MAX_NUMBER = 2000; //保存できる素数の数
int sosu[MAX_NUMBER]; //この配列に素数を保存
int main(){ int num=0; //見つけた素数の総数 初期値は0
int i,j,route;
int judge; //素数のとき1,素数でないとき0とする
int k=0,h=0;
sosu[num] = 0; //素数の初期化
for(i=2;i<=10000;i++) //1をとばして2から素数判定を始める {
/*エラトステネスのふるい*/
for(route=1;route*route<=i;route++); //iの平方根より大きい自然数で、最も小さいものを求める
for(j=0,judge=1;sosu[j]!=0 && sosu[j]<route;j++)//iの平方根より小さい素数で割り切れるものが無いとき、iは素数 {
if(i % sosu[j] == 0){ //何らかの素数で割り切れたとき、その数は素数でないので終了
judge = 0; //素数でないので0にする
break; } }
if(judge){
sosu[num] = i; //新しく見つけた素数の保存
num++; //見つけた素数の数を1増やす
sosu[num] = 0; //保存されている素数配列の終わりが分かるように、配列の最後を0にしておく } }
while(sosu[k+1]){ //求めた素数のうち双子素数を表示
if(sosu[k+1] - sosu[k] == 2){ //連続する二つの素数の差が2なら双子素数なので表示
cout << "(" << sosu[k] << "," << sosu[k+1] << ")" << " ";
h++; //一つの組を表示するたびにカウンタhを1増やす
}
if(h == 6){ //1行に6つの組が表示されたら改行
cout << endl;
h = 0; //カウンタ初期化
} k++; } cout << endl; return 0;}


17 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 15:32:57 ]
>>16
pc10.2ch.net/test/read.cgi/tech/1170343752/273
向こうにレスついているからそれ読んだら二度と来るなよ。

18 名前:デフォルトの名無しさん [2007/02/20(火) 17:43:12 ]
iniファイルからキーを指定して文字列や数字を取得する方法を教えてください

19 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 18:18:29 ]
>>18
GetPrivateProfile*で始まる関数を調べるるるる〜

GetPrivateProfileInt
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_getprivateprofileint.asp
 ・
 ・
 ・

20 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 19:00:14 ]
iniファイルというのは別にWindowsオンリーなものではないのであるが
まぁたぶんWindowsだろうけど



21 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 19:52:58 ]
>>10
一個ずつコピーするぐらいなら、せめてstd::copyを使え。

22 名前:デフォルトの名無しさん [2007/02/20(火) 22:24:49 ]
裏切派遣って知ってる?
元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて派遣やってるバカのことw

前の会社を裏切り、結局派遣先からも騙されてる。
そもそも信頼されてるなら直接契約するか正社員にするはずだが、派遣会社経由って舐められ杉

自分でも騙され裏切れられてることは薄々わかってるから派遣問題の話が出るとウッキー!って逆ギレw


23 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:33:55 ]
GetPrivateProfileは使っちゃらめええええ

ってMSDNに書いてるよね。どうなんだろ。
俺は自分で関数書いてるけどさ。

24 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:06:07 ]
え?INIファイルは使っちゃらめえええ、とは書いてあるが。レジストリをどうぞ、ということ。
あとNT系ではいっさいキャッシュが効かないのでパフォーマンス的にはごめんなさい、だったと思う。

25 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:13:09 ]
XML使え。

26 名前:デフォルトの名無しさん [2007/02/20(火) 23:18:54 ]
ソースがごっちゃになるので、
機能ごとに関数を別ファイルにして分割コンパイルにしたいのだが、
そうするとグローバル変数を、いちいちexternでファイルの先頭に持ってくるのも面倒なので、
ヘッダファイルにまとめてしまいたいのだが、何かウマい方法ありませんか?
externで宣言されているヘッダをすべてにつけて、
main関数のあるところにだけ、externが付いていない宣言をつけたヘッダをつける方法で、間違っていませんか?

…なんか日本語おかしい

27 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:25:28 ]
>>25
XMLって面倒なんだけど

28 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:26:06 ]
>26
グローバル変数をやめればおk。

29 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:32:25 ]
>>27
MSXML

30 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:32:55 ]
>>28
そんな Σ(´Д`lll)



31 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:36:17 ]
>>26
グローバル変数をやめて、今までグローバル変数にしていたものを管理するクラスを作ればいい。
#つーか、設計しなおせよ。

32 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:47:24 ]
>30
全部パラメータ渡しに変える。可能な限りconstつきで。
これで今まで気がつかなかったバグも見つかって一石二鳥。

33 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:49:48 ]
よーしぱぱシングルトンクラス1つ作って全部つめこんじゃうぞー

34 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:50:23 ]
グローバル変数どこで使う?みたいなグダグダ進行してるスレ探してみたがないな

35 名前:26 mailto:sage [2007/02/21(水) 00:01:23 ]
>>31-32
なるほどー…
クラスってこういう使い方もするんですね…

しかし、一つしかないグローバル変数扱うのに
わざわざクラス作って宣言し、pc->a(data)とかやるのは非効率な気がしてならないのですが、
そこら辺教えていただけませんか?

36 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:07:47 ]
実行時の効率という意味なら、そこがボトルネックになることは100%ない(言い切ってみる
コーディングのしやすさや後々のわかりやすさという意味なら、ぐろーばるはしねばいいのに

37 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:21:08 ]
>>29
それがめんどくさい。
スペースをどうするかとか同期か非同期か指定して
BSTRとかvariantとかL"〜"とか、
HRESULT hr =〜
if(FAILD(hr)〜

もっと、楽に設定ファイルの読み書きが出来たらなあ。

GetPrivateProfileは、キーがなかったらデフォルト値を返す
みたいな便利なのがある。

てか、便利なものってC/C++標準装備になんねーかな。

38 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:30:17 ]
>>35
時間ないし、複雑じゃないし、いっそグローバル変数にしたほうが楽なら
グローバル変数でいいと思うのが俺。
悩んで時間かけて改造したけどたいしたことないなら効率悪いじゃん。

でも、そうでないなら、グローバル変数やめたほうがいい。

引数減らす程度でどれくらい速くなると思う?
俺は調べたことないけどさ
メモリアクセスがわりとキャッシュにヒットしたと考えれば
よほど大量に実行しないと測定できないんじゃないの。
アセンブラでスタック積み込みに数命令、
読み込みはグローバルでもスタック積み込みでもたいして命令数かわらんだろ。

39 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:35:25 ]
>>26
externつけてない宣言でも外部から参照可能だよ。
externつけた宣言しておきながら定義してもOKだよ。
それともCとC++でちがったっけ?
ちゃんと確認していないので間違えてたらすみません。
グローバル変数はあまり使わないものでして。

40 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:49:00 ]
externをちゃんとわかってないヤツがいるな



41 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 09:35:38 ]
externって「どっかにあるから探せよコラwwww」っていう感じくらいしかわかってない

42 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 09:45:48 ]
extern 無しは「ここにおいとくから使えよコラwww」

ヘッダー内で extern 無しを書いて、あちこちでインクルードされると、
じゃどれつかうんだよコラ!!! とリンカが怒る

43 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 10:06:32 ]
なるへそ

44 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 10:19:44 ]
超訳/超解説の類って集めると楽しそうだ。役には立たなさそうだが。

45 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 10:40:48 ]
D&Eによれば、Stroustrupはグローバル変数肯定派だよ
Simula使った後にC with classを開発する際にその必要性を
痛感していたようだ

C++ならてきとーにnamespaceにくるんどけば、別に困らんと思うよ

46 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 10:53:43 ]
まず、宣言と定義を理解しているかを各自再確認するように。

47 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 12:22:01 ]
本物のプログラマはヘッダを書かない。
よって本物のプログラマはグローバル変数を使わない

48 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 12:26:19 ]
へえ

49 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 13:47:07 ]
>>37
#import使えば戻り値のHRESULTの値がエラーのとき勝手に例外に変えてくれるから、
それに関しては毎回FAILDなんかで調べる必要はなくせるぞ。

50 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 15:17:14 ]
>>47
偽者発見



51 名前:デフォルトの名無しさん [2007/02/21(水) 17:33:39 ]
C++ で exit 関数とか abort 関数を使ってもいいの?

52 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 17:41:53 ]
exitを呼ぶと、関数呼び出しだから自動変数のデストラクタは呼ばれない。
グローバル変数など静的記憶期間にあるオブジェクトはデストラクタで解体される。
abortはそれすらも保障がない。

それを踏まえた上で呼ぶのなら誰も止める者はいない。

53 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 17:42:22 ]
>>51
デストラクタがすっ飛ばされちゃうんだっけ?

54 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 17:46:50 ]
exit と同じことをやろうと思ったら、
例外をスローして main でキャッチして return しかないのか。。。

55 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:28:37 ]
>>54
簡単に実装できるからいいんじゃね?

でも catch(...) とかあるから確実に exit することができないって問題があるか。
まぁ、これは利点でもあるわけだが。

56 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:33:57 ]
全部オブジェクトのポインタをグローバルに保っておいて適当な関数で解放させるようにしてその関数をatexitで登録したらいいんじゃないかな?

57 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:37:38 ]
単純にcatch(...)で捕まえたらmainへ向けてさらにthrowすれば良いのでは?

58 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:47:56 ]
だめだめ

59 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:51:23 ]
>>57
それは自分ですべてのコントロールが可能であることが前提だし、
catch(...)じゃなにを捕まえたのかわからんから再throwすべきものなのか
再throwしちゃいけないものなのかの判断ができんし。

60 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:40:16 ]
>59
よく分からない例外を握りつぶすなよ。
処理できる例外なら...で捕まえるなよ。



61 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 02:02:00 ]
struct OBJECT
{
  FLOAT fHigh;
};
のとき、fHighを初期化するには、何か特別なことをしなければいけないのでしょうか?

62 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 02:24:16 ]
>>61
コンストラクタで初期化すれば?

63 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 02:58:25 ]
>>61 ふつうに初期化すればいいよ。

64 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 02:59:14 ]
>>61
struct OBJECT a={12.345};

65 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 06:44:45 ]
そもそもFLOATってどんな型だよ。

66 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 09:43:15 ]
>>62を検索したところ、まさにそれでした!!ありがとうございました。

67 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 19:55:42 ]
C++でscanf()のいい代替物って無いんですかね

68 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:07:15 ]
#include <cstdio>
std::scanf()

69 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:11:32 ]
>>68
型安全性が無いのと、文字列読み込みで長さを無制限にできない点がちょっと。
素直にstd::stringに読み込みたいのですが。

70 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:14:34 ]
>>67
std::basic_istream<_Elem,_Traits> operator>>(なんとか)



71 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:15:14 ]
>>70
それって、%[a-z]とか%[^,]みたいなことができますか?


72 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:20:25 ]
boost::format

73 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:21:12 ]
boost::spirit

74 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:23:11 ]
>>72
boost::formatがサポートしているのは出力だけだと思っていました。
入力もサポートしていたのですね。

75 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:24:14 ]
>>73
それはscanf()の代わりにlex & yaccを使え、と言っているようなもので、
適切な代替物というよりはオーバースペックに思えます。
無論、もともとlexが適切なケースではlexを使えばよいでしょう。

76 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:27:14 ]
少なくとも俺がBoostを使い始めてからの3年間では
入力でboost::formatが使えるなんて与太話は聞かない。

つ boost::Xpressive

77 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:28:45 ]
readlineしてregexp。

78 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:33:38 ]
>>76
初めて知りました。boost::regexの次期バージョンなのでしょうか。
>>77
regexpだと、その後さらに型変換が必要ですよね。文字列からの。
scanf()より余程複雑な字句解析を行うことができますが、
記述性と簡便性においては、かなり劣るといわざるを得ないのではないでしょうか。

79 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:37:49 ]
なんだか要求が微妙すぎるな。
自作するしかないのでは。

80 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:44:27 ]
googleがPCREに寄贈したラッパーコード(pcrecpp)では、

int n;
string s;
pcrecpp:RE re("(\\w+)=(\\d+)");
re.FullMatch("ruby=1234", &s, &n);
のようなことが出来るようですね。

これぐらいだとかなりいい感じです。



81 名前:デフォルトの名無しさん [2007/02/23(金) 11:36:38 ]
仮想関数についての質問です
派生クラスで再定義するメンバ関数以外に仮想関数にする意味はありますか?

82 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 11:45:35 ]
>>81
あんまり無い。
仮想関数の意味を理解していれば自明だと思うが。

ただしデストラクタとか暗黙のうちに再定義されるものも
あるので、知らないと良く分からない場合もあるかも。
あとは RTTI を有効にするためだけのダミーとか。

83 名前:デフォルトの名無しさん [2007/02/23(金) 17:58:49 ]
整数型のメンバ配列変数の便利な初期化方法を教えてください

84 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 18:05:45 ]
>>83
つ[std::vector]

85 名前:デフォルトの名無しさん [2007/02/23(金) 18:08:07 ]
普通の配列の初期化は無理ですか?

86 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 18:12:33 ]
コンストラクタで memset すればいいのでは。

87 名前:デフォルトの名無しさん [2007/02/23(金) 18:25:57 ]
memsetでやります

88 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 18:39:05 ]
memset()なんて濫りに使うもんじゃない。
せめてstd::fill()を使え。

89 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 18:41:54 ]
そのほうがよかろう

90 名前:デフォルトの名無しさん [2007/02/23(金) 19:41:21 ]
カラフルなテキストを表示したいんですけど
SetTextColor+DrawTextだと限度を感じました。(頑張っても行単位がいいところ)
黒黒赤赤黒黒
黒黒青青赤青
こんな風に描写するのに適した関数教えてください。



91 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 19:42:59 ]
>>90
スレ違い

Win32API質問箱 Build50
pc10.2ch.net/test/read.cgi/tech/1171721448/

92 名前:デフォルトの名無しさん [2007/02/23(金) 19:53:32 ]
>>90
一文字ずつ色設定して一文字ずつ書き込む
どうかんがえても、これしかないでしょう
どの環境でも

93 名前:デフォルトの名無しさん [2007/02/23(金) 19:59:59 ]
VisualStudio 2002環境で確認したのですが
stringstream::operator <<()を使用すると
プロセス終了まで開放されないメモリプールが発生しているようなのですが
対応方法をご存知の方いらっしゃいませんか?

スレッドを作っては消すを繰り返すプログラムで
生成したスレッド内でoperator<<()を使用すると使用メモリが増加するのですが
インスタンス・スレッドハンドルの開放を行ってもメモリが減りません
(インスタンスを生成しただけでは問題ないようです)

CreateThread()ではCライブラリでメモリリークが発生するとの記述もありますが
スレッドを_beginthreadex()で生成しても発生していて困っています

94 名前:90 mailto:sage [2007/02/23(金) 20:08:37 ]
>>91
スマン去ります。

>>92
文字列中のタグ解析して色自動でつけてくれるよな物が関数化されてるかと思って

95 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 21:12:58 ]
>>90
Win32APIスレ行け
んでもってリッチテキストでも使ってろ

96 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 00:15:58 ]
>>93
それは繰り返しただけメモリ使用量が増加していくの?
プールがちゃんと再利用されてれば問題ないようにも思うんだけど。

97 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:50:18 ]
質問です。
配列を使い、その値の合計値を出す際に私はループカウンタを利用して足す手法を
思いつくのですが、それ以外の方法があると聞きました。
ですが、それ以外の方法が思いつかなく質問させてください。

int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int nSum = 0;

for ( int i = 0; i < 10; i++ )
{
nSum += a[i];
}

return nSum;

ここでループカウンタを使用せず、配列の全てを足すにはどうしたら良いでしょうか。

98 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:57:24 ]
>>97 素直が一番
こんなのじゃなくて
int nsum(int data[], int data_num){
if(data_num<=0) return 0;
return data[data_num-1]+nsum(data, data_num-1);
}

int nsum(int data[], int data_num){
int *p, sum=0;
for(p=&data[0];p!=&data[data_num];p++)
sum+=*p;
return sum;
}

99 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:59:22 ]
>>97
std::accumulate()

100 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 12:05:12 ]
回答者にも遠慮なく突っ込みを入れよう。

引き数がポインタなので、&data[0]する意味がない。p = dataで充分。
そもそも、ポインタを回す必要はない。ポインタ演算はバグの温床として禁止するコーディング規約もあるくらいだ。
したがって、

int nsum(int data[], int data_num){
// if (data_num < 0 || data == NULL) return 0; // 状況によっては神経質にここまでやるべき。
int sum = 0;
for (int ic = 0; ic < data_num; ++ic) {
sum += data[ic];
}
return sum;
}
の方が自然だろう。



101 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 12:12:07 ]
>>100
>引き数がポインタなので、&data[0]する意味がない。p = dataで充分。
終了条件と書き方を合わせたほうがいいと判断した

>そもそも、ポインタを回す必要はない。
*ループカウンタを使用せずに*

ついでいうと >>98 の書き方を推奨してはいない






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

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

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