X



C++相談室 part149
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2020/02/18(火) 06:19:41.54ID:xvjipUWj
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0953デフォルトの名無しさん
垢版 |
2020/03/21(土) 22:39:31.10ID:lGRjmGfi
>>949
ループのネストが可変なんだよね
templateが許されるなら再帰template
ダメならきれいには書けないと思う
0955デフォルトの名無しさん
垢版 |
2020/03/21(土) 22:49:54.75ID:XPOe/jnY
>>953-954
ありがとうございます。
再帰templateで調べてみます。

あと書いてて気付いたのですが、n桁のm進数にループ変数 a[0], a[1],... をエンコードするっていうのも一つの方法かなと思いました。
0956デフォルトの名無しさん
垢版 |
2020/03/21(土) 22:50:20.71ID:lGRjmGfi
確かにtemplateでなくても再帰で可能か
ただlambdaで渡せないからstd::functionで包む必要あるね
0957デフォルトの名無しさん
垢版 |
2020/03/21(土) 22:57:37.57ID:80zI/5JK
>>949
やりたいことは、係数をm^2の2次元配列xとm^3の3次元配列yに入れておいて、2番目のループではx[a][b], 3番目のループではy[a][b][c]を使用するということか?
サイズ可変でも動的に確保すればいいだけ。
0959デフォルトの名無しさん
垢版 |
2020/03/21(土) 23:07:32.20ID:XPOe/jnY
>>957-958
m^n 通りの添字 (a[i] for all i) の組み合わせを列挙し、その中でなんらかの処理をしたいという意味です。
説明の仕方が悪くて失礼しました。
0961デフォルトの名無しさん
垢版 |
2020/03/22(日) 01:21:14.83ID:GKarRavC
std::sortに並列化+ベクトル化指定つけて実行したら、コア数以上に高速化したんだけど、なんで?
0964デフォルトの名無しさん
垢版 |
2020/03/22(日) 02:31:12.30ID:7dJergc9
>>955
こういう解釈でいいのかな
ループがふたつになるかな

a=new int[n];
for(i=0;i<m^n;i++){
 for(j=0;j<n;j++){
  a[j]=i%m;
  i/=m;
 }
 function(a,n);
}
delete[] a;
0967デフォルトの名無しさん
垢版 |
2020/03/22(日) 11:56:28.35ID:GKarRavC
多重継承のときのCRTPについて説明してるサイトないですか
0969デフォルトの名無しさん
垢版 |
2020/03/22(日) 19:39:49.88ID:HvrypJyW
>>949
>TeX の文法で数式を書けば
>\prod_{i=0}^{n} \sum_{a[i]=0}^{m}
>という意味です。
絶対ではないが、標準的な数学の記法だと、その意味では、
\sum_{a[0]=0}^{m}・・・\sum_{a[n]=0}^{m}
と書くのがが普通だと思う。
ところでそれは量子力学の経路積分か何かですか?
経路積分の場合は、本によって上記の部分に割と独特の変な記号を使う場合があって、
あなたの書いたように書いてある本もあるかもしれません。
ただ、普通の数学記法だと余り使いませんよね、その書き方は。
0970デフォルトの名無しさん
垢版 |
2020/03/22(日) 19:46:47.90ID:HvrypJyW
>>969
補足すれば、普通の数学記法だと
\sum_{a[0]=0}^{m}・・・\sum_{a[n]=0}^{m} f(a[0],・・・,a[n])  //(1)
ですね。
\prod_{i=0}^{n} \sum_{a[i]=0}^{m}  //(2)
の記号の場合は、
X= \prod_{i=0}^{n} \sum_{a[i]=0}^{m} g_i(a[i])  //(3)
の場合は、
b[i] = \sum_{a[i]=0}^{m} g_i(a[i])  //(4)
(i=0, ・・・, n)
を先に計算しておいて、
X = \prod_{i=0}^{n} b[i]   //(5)
 = b[0]・・・b[i]   //(6)
の意味に解釈するのが標準的な数学の記号の使い方だと個人的には思います。
(1)と(3)ではかなり意味が違いますが、(2)の記号を、(1)の先頭に使えるかと言えば、
絶対使えないわけでは有りませんが、使う前に何らかの補足説明が必要になりそうです。
0973デフォルトの名無しさん
垢版 |
2020/03/23(月) 12:49:54.29ID:bf1cRh+B
int *pInts = new int[10]();
とした場合の最後の()の意味は何でしょうか?
付けない場合との差を教えてください。
0974はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/23(月) 13:29:11.05ID:FLdc410A
>>973
イニシャライザ。
普通のクラスではそれがないときはデフォルトコンストラクタで初期化される (空の括弧があっても無くても同じ挙動) けど、
int 等では初期化を明示しない限り初期化されない。
逆に言えばこの場合は初期化を明示しているので初期化される。 (0 が入る)
0975デフォルトの名無しさん
垢版 |
2020/03/23(月) 13:37:39.77ID:bf1cRh+B
>>974
有難うございます。では、
int *pInts = new int[3](1,2,3);  //(1)
int *pInts = new int[3]{1,2,3};  //(2)
の違いは何でしょうか?
0979デフォルトの名無しさん
垢版 |
2020/03/23(月) 14:18:32.74ID:bf1cRh+B
>>976
ちょっと待ってください。
>>973 の場合の () は、「集成体初期化」のうちの「中身が全く入ってない括弧」と解釈してよろしいのでしょうか?
0980はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/23(月) 14:39:25.62ID:FLdc410A
>>979
いいえ。

> initializer が空の括弧の場合、それぞれの要素は値初期化されます。

に該当する。
0981デフォルトの名無しさん
垢版 |
2020/03/23(月) 16:20:38.54ID:bf1cRh+B
>>980
最初は集成体初期化を使って、
int *pInts = new int[100](1,2,3);  //(1)
int *pInts = new int[100](1,2);  //(2)
int *pInts = new int[100](1);   //(3)
int *pInts = new int[100]();    //(4)
とどんどん()の中の項目を減らして行き、最後に0個にした場合、
推論的な延長線上にあると思えるか、それとも全く違った結果になるかどちらですか?
0982はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/23(月) 17:58:00.87ID:FLdc410A
>>981
C++20 的に言えば集成体初期化の文法に統合されたということにはなるんだと思うけど、経緯はよくしらない。
0983デフォルトの名無しさん
垢版 |
2020/03/23(月) 18:27:48.17ID:bf1cRh+B
もし、
{1,2,3,0,0,0,0,0}
{1,2,0,0,0,0,0,0}
{1,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0}
のようになるんであれば、()は(xxx)のxxxを書かない場合と捉えるのは数学的推論として
正しい見方になりますね。
実際に上のようになるのか、未初期化の部分が残るのかは知りませんが。
0984はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/23(月) 18:32:49.31ID:FLdc410A
>>983
足りない分はゼロ初期化されるよ。
C の時代からの配列の初期化の文法と一貫させてるつもりなんだと思う。
0985はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/23(月) 18:45:31.47ID:FLdc410A
>>983
空の丸括弧でゼロ初期化されるのは C++03 にはすでに有って、
波括弧で初期化する文法は C++11 から入って、
(そこから色々と条件の緩和やら変更やらがありつつ)
空ではない丸括弧で集成体初期化になるのは C++20 からという段階的な変化がある。

追加された文法が既存の文法となるべく一貫性を持つように統合しようとはしているけど、
互換性を壊さないようにというのも C++ の強い要件なので、
正確なルールはごちゃごちゃした条件の塊になりがち。

まあまあ整理されている部分もあるけど、
勝手な予想ではなくちゃんと資料にはあたった方がいいよ。
0987デフォルトの名無しさん
垢版 |
2020/03/23(月) 20:24:40.26ID:V7MpBiZM
結局、波括弧と丸括弧はどっちが良いの?
C++11の時点では、波括弧が使えるところでは波括弧使っとけってのがMayers神の教えだったけども
0989デフォルトの名無しさん
垢版 |
2020/03/23(月) 22:25:35.27ID:d94IfFIM
好きなようにやったところで法(規格なりデファクトスタンダード)にはならんだろw
0990デフォルトの名無しさん
垢版 |
2020/03/23(月) 23:44:35.50ID:Y58N/W/D
よし、じゃあ今から俺が法な。


ここの住人は全員システムハンガリアン強制
0992はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/24(火) 00:21:01.48ID:DmQItF6u
>>987
シンタクス的にどちらでも良いときには波括弧を優先した方がよいと思う。
波括弧は縮小変換を許さないので意図しない情報の欠落は防止できる可能性が高い。
縮小変換が必要な場面に限って丸括弧を使えばそこが要注意ポイントってのがわかりやすい。

----

ところで縮小変換より狭化変換という用語の方が好きなんだけど、
みんなどっち使ってる? やっぱ縮小変換の方が標準的かな?
0998デフォルトの名無しさん
垢版 |
2020/03/24(火) 22:49:16.96ID:T0vrM+QL
>>993
数学の記号法と言うのは本によって違ってるから。
特に物理学は必要に迫られて新しい記法を発明してしまう。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 35日 16時間 48分 52秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況