- ベストアンサー
後置増分演算子と前置減算演算子についての質問です。
dist[a[i].price]++; ……1 b[--dist[a[i].price]]=a[i]; ……2 1式についてはa[i].priceである要素の個数を数えているそうですが、1式は後置演算増分子で dist[a[i].price]=dist[a[i].price]+1 となると思うので、違うと思うのですが…… また、2式については,分かりやすく書き直すとどのようになるのでしょうか? これは、分布数え上げソートのソースコード中にでてきたのですが、この部分の解釈ができなくて、困っています。宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
dist[] は、価格別の集計テーブルです。 たとえば、商品 a[i] という物品の価格が3円であった場合(つまり a[i].price = 3 の場合)、 dist[3] の値が1つ増えます。 増分(減算)演算子の前置と後置の違いは優先順位だけですので、単体で出てきた場合、前置でも後置でも同じ動作をします。 また、『2』の場合、 c = a[i].price; dist[c] = dist[c] - 1; b[dist[c]]=a[i]; となり、テーブル dist の要素 [c] から1つ値を減らした上で、その瞬間の集計値が dist[c] である商品 a[i] を、商品スタックテーブル b[] へ格納します。
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
2の場合 b[--dist[a[i].price]]=a[i]; 分割すると 最初にする計算は dist[a[i].price] = dist[a[i].price] - 1; となることはわかると思いますが 次の計算 b[dist[a[i].price]]=a[i]; a[]は構造体(あるいはクラス)の配列ですが b[dist[a[i].price]]=a[i]; の場合後ろの部分=a[i]が指定されてないため先頭のものをさします。 例えば typedef struct{ int nanika; int price; }AAA; int main() { AAA a[50]; a[0].nanika = 10; a[0].price = 20; printf("nanika=%d price=%d",a[0],a[0].price); } とすれば結果はnanika=10 price=20になります。 が普通は素直に printf("nanika=%d price=%d",a[0].nanika,a[0].price); としたほうが良いです。
お礼
ありがとうございます。
お礼
ありがとうございます。理解できました。