***すれ立てるまでもない質問はここで 第61刷***
>>918 走査させたりなんかする場合、大抵x方向から順にしますねー
ということは、メモリの並びを考えてみましょう。
int a[3][3];だと
a[0][0],a[0][1],…,a[0][2],a[1][0],a[1][1],…
でしょ。
いくらランダムアクセスだからといっても連続したデータの参照の方が早いです。。
x方向に連続データをアクセスするのと、y方向にとびとびにアクセスするのでは
ほんの少しx方向にアクセスした方がアクセスが早いかもしれません にゃんにゃん
thx!
>>918 直感的に分かりやすい方が良いですよ。
多くの場合、ソースの分かりやすさは多少の遅さを大目に見るだけの価値があります。
Cを使う場合は直感と実装が激しく乖離しすぎたものは逆に分かりにくいよ。
メモリイメージを考えたときa[y][x]の方が直感的で分かりやすい。
a[y][x]のが直感的に分かりやすい
column - row じゃなくて
row - column でしょ?
>>925 それは嘘。
GetPixel(int y, int x)なんてインターフェースは見たことない。
俺は1次元の配列にしちゃうけど
x、yと考えるかrow-columnと考えるかで変わるね
俺はやっぱx,yかな。
プログラム始める前の数学でもう染み込んでる。
row-columnを考えるならそれもわかりやすそうだ。
ようは自分が直感的にわかる方にすればいいさ。
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];
いやまて、重要なことに気が付いた。
座標なら、a[x][y]
行列なら、a[row][col]
俺ならこうだ。
a[y][x]
a[col][row]にするのは考えられん。
一般常識的にはx,y
Cの一般常識的にはy,x
Cに一般の一般常識持ち込むやつはDQN
でFA?
まぁ
>>930の例のように、
ループの表現に重きを置くか
配列の宣言に重きを置くかだろうね
そう考えると
>>921のx方向に走査、ということを考えるとy,xなわけだが、
>>921に書かれてるのはx,yなわけだ
矛盾してますね
なんかまた某糞コテに見えてきたよ…┐(´〜`)┌
ちなみに漏れはy,x派だな
そこでマクロ
#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―
という具合に生成することはできたんですけど、
肝心の経路長を求める部分がわかりません。
>>933 > なんかまた某糞コテに見えてきたよ…┐(´〜`)┌
コテちがうよー
座標を表すときa[y][x]がいいよー にゃんにゃん
gcc/g++を使いたいと思ったんですけど
CygwinとMingw gccとどちがいいんですか?
CygwinだとC++で書いたプログラムのWinネイティブが作れないそうだよ
>>938 >>939 >>940 レスありがとうございます
makedependやらその他の周辺ツール?などはMingwにも含まれていますよね?
まぁ940さんのレスでほぼ決まってるんですけど orz
VRAMをメモリにmapするとき連続した領域を取るだろ?
a[y][x] にしとけって。マジで。
$ 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 を呼ぶ
…といったところを適宜使い分けるくらいしか思いつきません。
ですが、それぞれ欠点として、
(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);
パラメータをひとつのクラス・構造体にまとめる。
>(1) グローバル変数、クラスのメンバ変数などを利用し、
> あらかじめ必要な値をセットしておく。
グローバルは極力避ける。
パラメータを減らすためにメンバ化するのは邪道。
(2),(3)は有効(IDE前提だったら)
しかし引数の多い高機能な関数 と聴いて
そこはかとない不安を覚える
やっぱり頻繁に使うパターンだけwrap関数にしておいて
それ以外の機能を使いたいときはデフォルト引数とかで誤魔化すのが楽かなあ?
>>946 まあ、グローバル変数に頼るっていうのは割とネタですけど。
>パラメータを減らすためにメンバ化するのは邪道。
そうですか…。
アプリ起動時に1回だけ初期化、とかならメンバ変数でも有効そうですけどね。
>>947 鬼のように引数が多くて、かつ大半がデフォルトで使う機会が多い引数とかなら
使いやすいかもしれませんね(凄い状況限定だなあ)
それ以外だと、なんだかんだいって逆に面倒そうな(汗)
>>948 まあ、言葉の例えですし。うん。
マイクロソフトがどうこうとは決して。
>>918 宣言や使用の際は、hoge[y][x]で、カウンタや関数の引数では、
コンソールアプリではy, x、ウィンアプリではx, yかな。
コンソールアプリは、右右右右下右右右右下と表示するから、
カウンタで表示したいとき、逆だと表示できなくなる。
ウィンアプリは、座標が引数のライブラリ関数が多く、
それが全てx, yだから、それに合わせてそうする。
よく逆に書いてしまうけど、バグとしてすぐに気づくから助かる。
>>945 構造体かな。Win32APIもこの方式だし
>>940 Windowsネイティブって何ですか?
>>935 幅優先探索を用いるのが簡単で良いですよ。
隣接行列、幅優先探索などをキーワードに検索してみてください。
>>944 引数オブジェクトの導入を検討すべきだと思いますよ。
これは典型的なリファクタリングのひとつです。
975?
958 :
デフォルトの名無しさん:04/11/19 18:52:45
今、realスパゲッティ茹でてます。
7分って書いてるけど、
皆さんは何分ぐらいが好きですか?
俺は9分
960 :
デフォルトの名無しさん:04/11/19 18:54:40
混じれ酢サンクス
ちょっと堅めができました
>>958 時間は計ってないです。
おはしで真ん中をつまんでみて、「だらん」てなったら茹であがりです^^
>>958 1本とって噛んでみるとよいです。
アル・デンテ!
1時間たってたのか…
965 :
デフォルトの名無しさん:04/11/19 20:42:49
コンテナと配列の違いを教えてください。
>>965 簡単に言うとコンテナはその名の通り、オブジェクトを入れる器のようなもの。
配列は単に複数個のオブジェクトをまとめて取り扱えるもの。
コンテナは器全般のことでベクタ(配列)、リスト、ツリー等用途ごとにいろいろある。
配列はコンテナの一種で要素を一直線に並べて格納するもの。