C++相談室 part155

■ このスレッドは過去ログ倉庫に格納されています
2021/03/24(水) 12:07:15.39ID:R+oM8cup
※前スレ
C++相談室 part154
https://mevius.5ch.net/test/read.cgi/tech/1610096040/

テンプレここまで
2021/03/24(水) 13:01:36.77ID:eNnFQgEr
2get
2021/03/24(水) 13:37:00.67ID:uPqg/PBu
msysの thread_local が、わりとちゃんと動くのがありがたい
昔は当たり前にクラッシュしてた
2021/03/24(水) 23:24:56.26ID:DDXRo65G
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
2021/03/25(木) 00:13:37.31ID:eNzfljpt
>>4
このテンプレはいつまで貼るの?
2021/03/25(木) 00:32:41.48ID:BFmdRR/m
たぶん最初に書いた本人以外はだれも気に入ってないと思う
もうやめたほうがいい
2021/03/25(木) 13:58:38.53ID:VH1J0VUJ
glslのnoise関数のような、特定の入力に対して、特定の乱数を返すような関数はありますか?C++に
2021/03/25(木) 14:41:00.85ID:Vfj9f3xX
完全に(疑似)乱数でよいのなら、
毎回シード設定すれば入力で一意に決まる乱数値を取得できるけど、それでええのん?
2021/03/25(木) 14:43:13.48ID:Vfj9f3xX
例えばこんなの
srand(input);
return rand();
2021/03/25(木) 17:26:16.86ID:BFmdRR/m
ハッシュと乱数を混同して質問しているに500ペリカ
2021/03/25(木) 17:48:06.49ID:VH1J0VUJ
>>9
それですね
ちょっとその発想を元に作ってみます
2021/03/25(木) 18:04:14.88ID:eNzfljpt
C++ の乱数生成器 (linear_congruential_engine, mersenne_twister_engine, subtract_with_carry_engine)
は厳密に挙動が定められているので環境によらず同じシードを与えれば同じ乱数列が得られることは保証される。
(余談だが分布生成器 (uniform_int_distribution など) は完全に同一の挙動は保証されない。)

rand は同じシードからは同じ乱数列になるという保証はあるけど、
他の環境に持って行ったとき (別の処理系を使ったとき) に同じになるという保証はない。
乱数の質についても保証がない。

必要な性質がよくわからんのだが、再現性・移植性が重要なら rand はあまりよくない。
2021/03/25(木) 21:06:48.96ID:VH1J0VUJ
自作のXorShiftでやってみようと思います
スレの流れがそんなに速くないようなので後にコードレビューでもお願いするかもです
2021/03/26(金) 07:33:40.04ID:YT9UBnI1
乱数表作るだけだろ
くだらん
2021/03/26(金) 13:48:17.35ID:OLCpSFIZ
コードレビューつってもなぁ、
明らかに未定義を踏んでるとか間違った結果を出力をするとかならともかく、
インターフェイスが綺麗かとか命名が適切がとかいった要素は状況に依存するんで
そこらへんの前提を共有できている状態じゃないと
かなりざっくりした一般論しか言えないと思うよ。
2021/03/26(金) 14:17:07.80ID:xeE+mVbe
7ですが、すいませんでした
場違いだったようなのですべて撤回します
2021/03/26(金) 17:49:14.73ID:Bae43LUT
QZあたりが疑似乱数の理論について本一冊分ぐらい語るのではなかったの???
2021/03/26(金) 17:50:06.84ID:Bae43LUT
乱数表をどうやって作るつもりなのかとそこはかとなく疑問が………
2021/03/26(金) 19:01:34.23ID:Rskx+UE5
ラジウムとガイガーカウンターでも使うんだろ
2021/03/26(金) 20:57:56.27ID:Bae43LUT
ガイガーカウンターは放射線源が強力だとカウントミスりそうであんまり高速な乱数生成に向かない
という印象
2021/03/26(金) 22:44:42.48ID:Bae43LUT
ていうか量子乱数発生器はスタジアムや野球場など人間が数千人〜数万人規模で集まり
興奮するようなところで量子乱数発生器を使うと乱数発生が偏るという実験結果がある
とモーガンフリーマンが言ってたから信頼できない
やっぱ第一選択はシードを19936ビットフルい与えてのmersenne_twister_engineなのでは……
2021/03/26(金) 23:42:48.79ID:uaj8R912
ハッシュと乱数を混同してただけでしょ
2021/03/27(土) 00:11:40.23ID:h1BsDCwR
>>17
大抵の用途には、私は MT を使いますね…
2021/03/27(土) 00:35:45.49ID:Ly0w36WW
メルセンヌツイスタは統計的な性質は良いが状態がやや大きい (普通のパソコンではもはや気にしないでよいレベルだが) ので、
いつでも選択するには過剰な気もする。
25デフォルトの名無しさん
垢版 |
2021/03/27(土) 00:52:36.37ID:tZBSsbg+
スレの流れをぶった切って申し訳ない
boostってもういらなくなったの?
15年ぶりにC++でプログラミングすることになったので
その辺の事情がよく分かりません
2021/03/27(土) 00:54:27.35ID:3iQ+aU3D
当然要るよ
多次元配列クラスとかまだSTLに入ってない
2021/03/27(土) 01:11:01.48ID:Ly0w36WW
個別には Boost 以外の選択肢もあると思うけどある程度に統一されてないと扱いづらいし、
Boost にあるものは Boost を使っておくのが無難な選択には違いないと思うよ。
2021/03/27(土) 01:17:35.37ID:1M7dxEop
boostはヘッダライブラリ自称してる割にビルド必要で使いづらいねん
2021/03/27(土) 01:26:03.40ID:Ly0w36WW
>>28
> ヘッダライブラリ自称

そんなことどこかに書いてあるの?
公式ページのトップにもビルドについて言及があるし、ヘッダのみみたいなニュアンスはないと思うんだが。
30デフォルトの名無しさん
垢版 |
2021/03/27(土) 02:13:45.76ID:FxCpf6Ea
ヘッダのみで使えると過剰に宣伝してるライブラリが多い。

と、あわしろ氏が申しておりました。
2021/03/27(土) 02:17:07.41ID:p6NWEZH2
あわしろってキンコン西野みたいなもん?
2021/03/27(土) 08:19:32.12ID:MzcivD4R
ビルド必要なのは別にいいけどbjamが糞すぎるからさっさと捨てて欲しい
2021/03/28(日) 12:33:00.93ID:11viivYN
class hoge{
public:
constexpr static int aaa[2] = { 1, 2};

static hoge get_hoge();
}

hage::hage()
{
hoge *_hoge = hage::get_hoge();

int tmp;
int i = 0;
tmp = _hoge->aaa[i];
}
とすると、ビルド時、undefined reference to `hoge::aaa'と出るけど、
tmp = _hoge->aaa[0];とするとエラーが出ない
これってなぜ起きて、どうやったら変数を使ってアクセスできるようになるの?
開発環境はSTM32CubeIDEのver1.6.0
2021/03/28(日) 13:05:07.76ID:hha5l0Ce
ちらちら混ざってる hage は hoge の間違いなのか何か別物なのか。
2021/03/28(日) 13:05:58.70ID:IQVnw+L7
>>33
サンプルコードが不足しているので何をどうしたいのかよくわからんのだが、
i が定数式じゃないと駄目だよ。
2021/03/28(日) 13:47:16.98ID:5/FvdRpo
>>35
うそやん?
2021/03/28(日) 17:41:23.48ID:11viivYN
>>34
hogeにはアプリで使う色々な定数が入ってて、hageがそれを参照するようにしてるんだ。
んなもんdefineでいいとかそういう話は置いといて、iが変数だと何がまずいの?
2021/03/28(日) 19:20:58.11ID:PRWHgvt6
三段活用はhoge、fuga、piyoだろ!常識だぞ
ハゲとか言う人にはもう教えません
2021/03/28(日) 19:23:19.81ID:YX9+FjRw
piyoは初めてみるな
2021/03/28(日) 20:20:31.89ID:W2vCV6FV
>>39
それなりに知られてるぞ
https://ja.m.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0
2021/03/28(日) 21:37:33.38ID:hha5l0Ce
>>37
> constexpr static int aaa[2] = { 1, 2};
クラススコープの↑は変数の定義に見えるけど実は宣言でしかなくて、プログラム中に実体を置くには別途定義が要る。
ただし const な整数型や constexpr な変数が定数式の文脈で即座に値として利用される場合はコンパイル時に直接定数として
置き換えられるので、定義が無くてもビルドできる。

定数 0 ではなく変数 i を添え時にすると定数式ではなくなるので定義が必要になる。
2021/03/28(日) 22:16:07.85ID:11viivYN
>>42
分かったようなわかんないような感じなんだけど、
例えば、
class hoge{
public:
constexpr static int aaa[2];

static hoge get_hoge();
}

hoge::aaa[2] = {1, 2};

みたいにするってこと?
2021/03/28(日) 22:26:27.67ID:hha5l0Ce
>>42
それだと定数評価できなくなるから、たぶんやりたいことと違うよね。
「別途定義」は、宣言の初期化子はそのままで↓をどこかのコンパイル単位に追記するだけでいい。
constexpr int hoge::aaa[];
44デフォルトの名無しさん
垢版 |
2021/03/28(日) 22:50:05.31ID:R4xh1GwG
static constexpr int * constexpr aaa = …

static inline constexpr int aaa[] = … (c++17)
で行けんじゃね?知らんけど。
2021/03/28(日) 23:57:42.15ID:hha5l0Ce
そういえば inline 変数で済むようになったんだっけ。 C++17 でビルドすれば別途定義は要らないね。
https://cpprefjp.github.io/lang/cpp17/inline_variables.html
2021/03/29(月) 08:44:37.72ID:A8t4nM4q
これで思い出したんだけどメンバ変数のconstexprとstatic constexprに違いってあるんだっけ?
2021/03/29(月) 10:42:44.85ID:4VjYBAI0
メモリ上に唯一ここだけしかないんだぞって見る奴に分かるようにしてるんでしょ
コンパイラ的にはあってもなくても同じ
2021/03/29(月) 11:13:21.97ID:a9nDQaAf
>>46
メンバ変数はインスタンス無いとあかんやん
4946
垢版 |
2021/03/29(月) 11:39:07.94ID:jFqdjOB1
インスタンスごとになるのか・・コンパイル時定数なのに(保証は無いのかもしれんけど
普段staticつけてるから疑問に思ってたんだ、ありがとう
2021/03/29(月) 16:52:43.90ID:ZAtZtNlj
>>43
thx
C++の仕様が古いのか分からんけどうまくいかなかったんで、constで宣言して別に定義したわ
2021/04/01(木) 00:44:40.92ID:3rw8Xzm0
クラスを使わずにフリー関数だけで何もかも実装してしまう
2021/04/01(木) 02:23:28.90ID:zgIDekUq
なんでもかんでもクラスに放り込むのは良くないというのはよく認識されるようになってきたみたいだけど、
だからといって C++ を使う以上は非メンバ関数だけで構成するのも不格好だし、いい感じの設計は難しいね。
2021/04/01(木) 05:45:44.25ID:KfB45e5F
知らん馬の骨の好みに合わせる意味はない
2021/04/01(木) 06:17:26.46ID:xkKFGoH+
無駄に上から目線でワロタ
何様のつもりなのかと
2021/04/01(木) 11:54:02.32ID:/m7p4qXu
バカが無理してクラス使っても無駄に状態持つだけだから非メンバ関数使っとけ
2021/04/01(木) 14:49:39.84ID:mwubpVbO
ラムダ式で何もかも実装したらクラスを使ったことになる!
2021/04/01(木) 16:14:27.54ID:b0+JHWqP
>>38
hoge
hage
mage
かと思ってた
2021/04/01(木) 16:49:21.83ID:Ga8mQY/B
>>55
永遠に初心者のままだな
2021/04/01(木) 17:27:07.05ID:mwubpVbO
>>58
別に
2021/04/01(木) 18:40:51.78ID:/m7p4qXu
>>58
永遠に関数型理解できないね
2021/04/01(木) 18:42:28.20ID:zgIDekUq
メンバ関数を使わなければ関数型的ということはない。
2021/04/01(木) 18:48:20.10ID:/m7p4qXu
嫌味の理解できない奴が話をこじらせる。
2021/04/01(木) 22:02:12.44ID:mwubpVbO
誤解の余地がないぐらいしっかり要件定義できたら一人前の入り口
2021/04/01(木) 23:10:26.56ID:klwu+MWY
なんでもかんでもクラスに放り込むのは良くないけど、なんでもかんで名前空間に放り込むのは実に良い
2021/04/02(金) 01:40:11.97ID:UoCieKPr
ま、せやな
2021/04/02(金) 08:19:46.74ID:U50iDt4R
"Raw string literals" は 「生文字列リテラル」 って訳されるけど、「生」の部分をどう読んでいるのですか?
「なま」なのか「せい」なのか、「しょう」なのか
ググってもわかりません
https://cpprefjp.github.io/lang/cpp11/raw_string_literals.html
67デフォルトの名無しさん
垢版 |
2021/04/02(金) 08:32:50.23ID:/UxsPKSF
「生ポインタ」で「なまぽいんた」

界隈で使われてる超専門用語
教科書には読み方はおろかその存在すら一切載って無い
しかしてC/C++使いは総じてその読み方を知ってる
2021/04/02(金) 08:39:51.40ID:U50iDt4R
>>67
「なま」なんですね
早速の解答ありがとうございます m(_ _)m
2021/04/02(金) 13:54:33.57ID:6+Rf0OKV
einsumとか添字の入れ替えくらいの本当に基本的な機能だけ持ってる多次元配列クラスがほしいんだけど、なんでこれしきのものがboostにはないの?
2021/04/02(金) 14:03:29.72ID:q3Egk2LJ
君の実装を世界が待ってるんだぞ
文句言う前に公開せよ
2021/04/02(金) 14:19:38.24ID:6+Rf0OKV
>>70
今は自分で実装して騙し騙し使ってるけど、こういうファンダメンタルかつパフォーマンスが必要なものは誰か信用できるプロバイダに作ってほしい
2021/04/02(金) 17:28:33.51ID:65VwiNme
実用的な必要に迫られている人こそ
変な妥協もお花畑なオーバースペックもない
機能美なコードを書けるんだけどな
2021/04/02(金) 19:20:37.25ID:OIYek4iX
>>72
実用的なコードというのは進化し続けるコードであって、常に古びた無駄を抱えているもんだ。
2021/04/03(土) 03:21:26.87ID:YT89Uc9u
仕様変更できなくなって陳腐化していくことはあるな
2021/04/03(土) 06:35:59.59ID:FsaMqi3u
std::vector<bool>のpopcountを簡単にとる方法をおしえてくだちい
以下のようにして自力で数えるしかない?
size_t popcount(const std::vector<bool>& vec) {
size_t cnt = (size_t)0;
for (auto it = vec.begin(); it != vec.end(); it++) {
if ((bool)(*it)) {
cnt++;
}
}
return cnt;
}
あとstd::vector<bool>::size()は総ビット数を返すみたいなんですが
では実際に占有しているヒープのサイズは
どうやって確かめたら良いんでしたっけ……_○/|_
2021/04/03(土) 07:04:05.36ID:FsaMqi3u
つかstd::count(vec.begin(), vec.end(), true)で一応動くみたいけど
中でbool型の等値判定していると思うんですが問題無いんでしたっけ……
2021/04/03(土) 07:45:13.57ID:lohjPiFl
不安だったらvector<bool>なんか使うな
それは素人が手を出していいものじゃない
2021/04/03(土) 09:24:55.78ID:FsaMqi3u
集合表現のためのビットマップのロジックを新たに新規に作るよりマシ、
という天才の判断
2021/04/03(土) 12:58:35.52ID:cvW9PgHj
std::bitsetじゃいかんのか?
2021/04/03(土) 13:23:18.30ID:FsaMqi3u
天才か!
しかしstd::bitsetは要素数が整数の基本型のビット数を超えられないのでは……
2021/04/03(土) 13:33:00.76ID:3ynmntXR
要素数が本当に動的に変わるの?
2021/04/03(土) 13:49:31.61ID:5dv7xI+Y
2^32以上のサイズが必要だってこと?
何に使うの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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