***すれ立てるまでもない質問はここで 第61刷***

このエントリーをはてなブックマークに追加
919デフォルトの名無しさん:04/11/18 15:46:26
>>918
a[x][y]
920デフォルトの名無しさん:04/11/18 18:22:13
>>918
a[y][x]
921デフォルトの名無しさん:04/11/18 18:43:58
>>918
走査させたりなんかする場合、大抵x方向から順にしますねー
ということは、メモリの並びを考えてみましょう。
int a[3][3];だと
a[0][0],a[0][1],…,a[0][2],a[1][0],a[1][1],…
でしょ。
いくらランダムアクセスだからといっても連続したデータの参照の方が早いです。。
x方向に連続データをアクセスするのと、y方向にとびとびにアクセスするのでは
ほんの少しx方向にアクセスした方がアクセスが早いかもしれません にゃんにゃん
922デフォルトの名無しさん:04/11/18 19:44:15
thx!
923デフォルトの名無しさん:04/11/18 21:16:22
>>918
直感的に分かりやすい方が良いですよ。
多くの場合、ソースの分かりやすさは多少の遅さを大目に見るだけの価値があります。
924デフォルトの名無しさん:04/11/18 21:49:25
Cを使う場合は直感と実装が激しく乖離しすぎたものは逆に分かりにくいよ。
メモリイメージを考えたときa[y][x]の方が直感的で分かりやすい。
925デフォルトの名無しさん:04/11/18 21:50:12
a[y][x]のが直感的に分かりやすい
column - row じゃなくて
row - column でしょ?
926デフォルトの名無しさん:04/11/18 21:53:13
>>925
それは嘘。
GetPixel(int y, int x)なんてインターフェースは見たことない。
927デフォルトの名無しさん:04/11/18 21:53:41
俺は1次元の配列にしちゃうけど
928デフォルトの名無しさん:04/11/18 21:54:28
x、yと考えるかrow-columnと考えるかで変わるね
929デフォルトの名無しさん:04/11/18 21:57:55
俺はやっぱx,yかな。
プログラム始める前の数学でもう染み込んでる。
row-columnを考えるならそれもわかりやすそうだ。
ようは自分が直感的にわかる方にすればいいさ。
930デフォルトの名無しさん:04/11/18 22:01:36
int hoge[X][Y];
int i, j;
for (i = 0; i < X; i++)
 for (j = 0, j < Y; j++)
  hoge[i][j];

int hoge[Y][X];
int i, j;
for (i = 0; i < Y; i++)
 for (j = 0, j < X; j++)
  hoge[i][j];
931デフォルトの名無しさん:04/11/18 22:01:52
いやまて、重要なことに気が付いた。
座標なら、a[x][y]
行列なら、a[row][col]
俺ならこうだ。

a[y][x]
a[col][row]にするのは考えられん。
932デフォルトの名無しさん:04/11/18 22:06:12
一般常識的にはx,y
Cの一般常識的にはy,x
Cに一般の一般常識持ち込むやつはDQN
でFA?
933デフォルトの名無しさん:04/11/18 22:32:14
まぁ>>930の例のように、
ループの表現に重きを置くか
配列の宣言に重きを置くかだろうね

そう考えると>>921のx方向に走査、ということを考えるとy,xなわけだが、
>>921に書かれてるのはx,yなわけだ

矛盾してますね
なんかまた某糞コテに見えてきたよ…┐(´〜`)┌

ちなみに漏れはy,x派だな
934デフォルトの名無しさん:04/11/18 22:54:55
そこでマクロ
#define axis(a, x, y) ((a)[y][x])
ですあっなにをするやめ
935デフォルトの名無しさん:04/11/18 23:03:15
○ 0

1○\
|  \
2 ○―○3

上図のように、任意の数のノード数がランダムにリンク(1がリンクしている状態)
するネットワークである始点から終点までの経路長を求めたい。
例えば、0が始点だったら1は経路長1、2と3は経路長2。

ランダムなネットワークの図を配列とfor文を用いて
 |0123
―+――――
0|―100
1|1―11
2|01―1
3|011―
という具合に生成することはできたんですけど、
肝心の経路長を求める部分がわかりません。
936デフォルトの名無しさん:04/11/18 23:03:40
>>933
> なんかまた某糞コテに見えてきたよ…┐(´〜`)┌
コテちがうよー

座標を表すときa[y][x]がいいよー にゃんにゃん
937デフォルトの名無しさん:04/11/19 00:22:45
gcc/g++を使いたいと思ったんですけど
CygwinとMingw gccとどちがいいんですか?
938デフォルトの名無しさん:04/11/19 00:24:55
>>937
coLinux
939デフォルトの名無しさん:04/11/19 00:58:09
>>937
Cygwin との違いは?
http://mingw.biggie.jp/what_is_mingw.html

勉強用ならCygwin入れれば勝手についてくるCygwin版。
実用的なツールを作りたいならMingW版。
940デフォルトの名無しさん:04/11/19 01:02:06
CygwinだとC++で書いたプログラムのWinネイティブが作れないそうだよ
941デフォルトの名無しさん:04/11/19 01:08:04
>>938
>>939
>>940
レスありがとうございます

makedependやらその他の周辺ツール?などはMingwにも含まれていますよね?
まぁ940さんのレスでほぼ決まってるんですけど orz
942デフォルトの名無しさん:04/11/19 01:58:21
VRAMをメモリにmapするとき連続した領域を取るだろ?
a[y][x] にしとけって。マジで。
943デフォルトの名無しさん:04/11/19 03:03:53
$ makedepend
sh: makedepend: command not found

うちのmingwにはついてない…。gcc -M で代用してますけど。
環境整備には少し苦労するかもね。ツールが揃ってるのは cygwin だし。
cygwin にも mingw 互換でビルドするオプションもあったような
気もしますけど。
944デフォルトの名無しさん:04/11/19 03:40:04
CまたはC++スレ、コーディングスレ等で聞くべきなのかもしれませんが、
とりあえずこちらで。

void Func(int a, int b, int c,・・・沢山の引数・・・) ;
という高機能な関数があるとします。
ですが、このままでは引数が多すぎて微妙に不便です。
かといって機能を絞るわけにもいかないとします。

このようなとき、
この2つの命題をクリアする方法はどのようなものがあるでしょうか。


(1) グローバル変数、クラスのメンバ変数などを利用し、
  あらかじめ必要な値をセットしておく。
(2) デフォルト引数を用いる
(3) オーバーロードで自動的に振り分ける
(4) 引数の少ない(低機能な)wrap関数 FuncSimple を作り、
  その内部で本体である Func を呼ぶ

…といったところを適宜使い分けるくらいしか思いつきません。
945944:04/11/19 03:40:35
ですが、それぞれ欠点として、

(1) 同じ設定で複数回呼ぶなら有効だが、異なる引数を渡したいときには不便
(2) 呼び出し側から、引数aにデフォルトではない値を渡したいときと、
  aはデフォルトで、bやcにそうではない値を渡したいときがあるとき
  「aはデフォルトを用い、bやcにのみ値を渡す」などが出来ないので
  結局引数が長くなる可能性がある
(3) 引数の型が同じだと辛い
(4) 覚えなければならない関数がやたら増える。
  特に、「aとcは値を渡すがbはデフォルトで」とかヤバイくらい増える

先輩のみなさんは、どのようにされていますか?
C/C++に限ったことじゃないですけど。


ちなみに以前、(4)のタイプでこんなの見たことが↓
void FuncA(int a);
void FuncB(int b);
void FuncC(int c);
void FuncAB(int a, int b);
void FuncBC(int b, int c);
void FuncAC(int a, int c);
void FuncABC(int a, int b, int c);
946デフォルトの名無しさん:04/11/19 03:54:49
パラメータをひとつのクラス・構造体にまとめる。
>(1) グローバル変数、クラスのメンバ変数などを利用し、
>  あらかじめ必要な値をセットしておく。
グローバルは極力避ける。
パラメータを減らすためにメンバ化するのは邪道。
(2),(3)は有効(IDE前提だったら)
947デフォルトの名無しさん:04/11/19 03:55:05
>>945
構造体に入れて渡す とか
948デフォルトの名無しさん:04/11/19 04:05:06
しかし引数の多い高機能な関数 と聴いて
そこはかとない不安を覚える
949デフォルトの名無しさん:04/11/19 04:05:26
950944:04/11/19 04:12:17
やっぱり頻繁に使うパターンだけwrap関数にしておいて
それ以外の機能を使いたいときはデフォルト引数とかで誤魔化すのが楽かなあ?

>>946
まあ、グローバル変数に頼るっていうのは割とネタですけど。
>パラメータを減らすためにメンバ化するのは邪道。
そうですか…。
アプリ起動時に1回だけ初期化、とかならメンバ変数でも有効そうですけどね。

>>947
鬼のように引数が多くて、かつ大半がデフォルトで使う機会が多い引数とかなら
使いやすいかもしれませんね(凄い状況限定だなあ)
それ以外だと、なんだかんだいって逆に面倒そうな(汗)

>>948
まあ、言葉の例えですし。うん。
マイクロソフトがどうこうとは決して。
951デフォルトの名無しさん:04/11/19 04:58:37
>>918
宣言や使用の際は、hoge[y][x]で、カウンタや関数の引数では、
コンソールアプリではy, x、ウィンアプリではx, yかな。

コンソールアプリは、右右右右下右右右右下と表示するから、
カウンタで表示したいとき、逆だと表示できなくなる。

ウィンアプリは、座標が引数のライブラリ関数が多く、
それが全てx, yだから、それに合わせてそうする。
よく逆に書いてしまうけど、バグとしてすぐに気づくから助かる。
952デフォルトの名無しさん:04/11/19 05:18:18
>>945
構造体かな。Win32APIもこの方式だし
953デフォルトの名無しさん:04/11/19 07:06:37
>>940
Windowsネイティブって何ですか?
954デフォルトの名無しさん:04/11/19 07:31:15
>>935
幅優先探索を用いるのが簡単で良いですよ。
隣接行列、幅優先探索などをキーワードに検索してみてください。
955デフォルトの名無しさん:04/11/19 07:33:34
>>944
引数オブジェクトの導入を検討すべきだと思いますよ。
これは典型的なリファクタリングのひとつです。
956デフォルトの名無しさん:04/11/19 09:19:42
>>975
次スレよろ
957デフォルトの名無しさん:04/11/19 09:33:12
975?
958デフォルトの名無しさん:04/11/19 18:52:45
今、realスパゲッティ茹でてます。

7分って書いてるけど、
皆さんは何分ぐらいが好きですか?
959デフォルトの名無しさん:04/11/19 18:54:12
俺は9分
960デフォルトの名無しさん:04/11/19 18:54:40
混じれ酢サンクス
961デフォルトの名無しさん:04/11/19 18:58:51
ちょっと堅めができました
962デフォルトの名無しさん:04/11/19 19:01:32
>>958
時間は計ってないです。
おはしで真ん中をつまんでみて、「だらん」てなったら茹であがりです^^
963デフォルトの名無しさん:04/11/19 19:52:44
>>958
1本とって噛んでみるとよいです。
アル・デンテ!
964デフォルトの名無しさん:04/11/19 19:53:33
1時間たってたのか…
965デフォルトの名無しさん:04/11/19 20:42:49
コンテナと配列の違いを教えてください。
966デフォルトの名無しさん:04/11/19 20:58:52
>>965
簡単に言うとコンテナはその名の通り、オブジェクトを入れる器のようなもの。
配列は単に複数個のオブジェクトをまとめて取り扱えるもの。
967デフォルトの名無しさん:04/11/19 21:07:28
コンテナは器全般のことでベクタ(配列)、リスト、ツリー等用途ごとにいろいろある。
配列はコンテナの一種で要素を一直線に並べて格納するもの。
968デフォルトの名無しさん
>>967
うちの配列はリストですが。