- 1 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 12:07:15.39 ID:R+oM8cup.net]
- ※前スレ
C++相談室 part154 https://mevius.5ch.net/test/read.cgi/tech/1610096040/ テンプレここまで
- 47 名前:デフォルトの名無しさん mailto:sage [2021/03/29(月) 08:44:37.72 ID:A8t4nM4q.net]
- これで思い出したんだけどメンバ変数のconstexprとstatic constexprに違いってあるんだっけ?
- 48 名前:デフォルトの名無しさん mailto:sage [2021/03/29(月) 10:42:44.85 ID:4VjYBAI0.net]
- メモリ上に唯一ここだけしかないんだぞって見る奴に分かるようにしてるんでしょ
コンパイラ的にはあってもなくても同じ
- 49 名前:デフォルトの名無しさん mailto:sage [2021/03/29(月) 11:13:21.97 ID:a9nDQaAf.net]
- >>46
メンバ変数はインスタンス無いとあかんやん
- 50 名前:46 mailto:sage [2021/03/29(月) 11:39:07.94 ID:jFqdjOB1.net]
- インスタンスごとになるのか・・コンパイル時定数なのに(保証は無いのかもしれんけど
普段staticつけてるから疑問に思ってたんだ、ありがとう
- 51 名前:デフォルトの名無しさん mailto:sage [2021/03/29(月) 16:52:43.90 ID:ZAtZtNlj.net]
- >>43
thx C++の仕様が古いのか分からんけどうまくいかなかったんで、constで宣言して別に定義したわ
- 52 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 00:44:40.92 ID:3rw8Xzm0.net]
- クラスを使わずにフリー関数だけで何もかも実装してしまう
- 53 名前:はちみつ餃子 mailto:sage [2021/04/01(木) 02:23:28.90 ID:zgIDekUq.net]
- なんでもかんでもクラスに放り込むのは良くないというのはよく認識されるようになってきたみたいだけど、
だからといって C++ を使う以上は非メンバ関数だけで構成するのも不格好だし、いい感じの設計は難しいね。
- 54 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 05:45:44.25 ID:KfB45e5F.net]
- 知らん馬の骨の好みに合わせる意味はない
- 55 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 06:17:26.46 ID:xkKFGoH+.net]
- 無駄に上から目線でワロタ
何様のつもりなのかと
- 56 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 11:54:02.32 ID:/m7p4qXu.net]
- バカが無理してクラス使っても無駄に状態持つだけだから非メンバ関数使っとけ
- 57 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 14:49:39.84 ID:mwubpVbO.net]
- ラムダ式で何もかも実装したらクラスを使ったことになる!
- 58 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 16:14:27.54 ID:b0+JHWqP.net]
- >>38
hoge hage mage かと思ってた
- 59 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 16:49:21.83 ID:Ga8mQY/B.net]
- >>55
永遠に初心者のままだな
- 60 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 17:27:07.05 ID:mwubpVbO.net]
- >>58
別に
- 61 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 18:40:51.78 ID:/m7p4qXu.net]
- >>58
永遠に関数型理解できないね
- 62 名前:はちみつ餃子 mailto:sage [2021/04/01(木) 18:42:28.20 ID:zgIDekUq.net]
- メンバ関数を使わなければ関数型的ということはない。
- 63 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 18:48:20.10 ID:/m7p4qXu.net]
- 嫌味の理解できない奴が話をこじらせる。
- 64 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 22:02:12.44 ID:mwubpVbO.net]
- 誤解の余地がないぐらいしっかり要件定義できたら一人前の入り口
- 65 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 23:10:26.56 ID:klwu+MWY.net]
- なんでもかんでもクラスに放り込むのは良くないけど、なんでもかんで名前空間に放り込むのは実に良い
- 66 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 01:40:11.97 ID:UoCieKPr.net]
- ま、せやな
- 67 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 08:19:46.74 ID:U50iDt4R.net]
- "Raw string literals" は 「生文字列リテラル」 って訳されるけど、「生」の部分をどう読んでいるのですか?
「なま」なのか「せい」なのか、「しょう」なのか ググってもわかりません https://cpprefjp.github.io/lang/cpp11/raw_string_literals.html
- 68 名前:デフォルトの名無しさん [2021/04/02(金) 08:32:50.23 ID:/UxsPKSF.net]
- 「生ポインタ」で「なまぽいんた」
界隈で使われてる超専門用語 教科書には読み方はおろかその存在すら一切載って無い しかしてC/C++使いは総じてその読み方を知ってる
- 69 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 08:39:51.40 ID:U50iDt4R.net]
- >>67
「なま」なんですね 早速の解答ありがとうございます m(_ _)m
- 70 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 13:54:33.57 ID:6+Rf0OKV.net]
- einsumとか添字の入れ替えくらいの本当に基本的な機能だけ持ってる多次元配列クラスがほしいんだけど、なんでこれしきのものがboostにはないの?
- 71 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 14:03:29.72 ID:q3Egk2LJ.net]
- 君の実装を世界が待ってるんだぞ
文句言う前に公開せよ
- 72 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 14:19:38.24 ID:6+Rf0OKV.net]
- >>70
今は自分で実装して騙し騙し使ってるけど、こういうファンダメンタルかつパフォーマンスが必要なものは誰か信用できるプロバイダに作ってほしい
- 73 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 17:28:33.51 ID:65VwiNme.net]
- 実用的な必要に迫られている人こそ
変な妥協もお花畑なオーバースペックもない 機能美なコードを書けるんだけどな
- 74 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 19:20:37.25 ID:OIYek4iX.net]
- >>72
実用的なコードというのは進化し続けるコードであって、常に古びた無駄を抱えているもんだ。
- 75 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 03:21:26.87 ID:YT89Uc9u.net]
- 仕様変更できなくなって陳腐化していくことはあるな
- 76 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 06:35:59.59 ID:FsaMqi3u.net]
- 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()は総ビット数を返すみたいなんですが では実際に占有しているヒープのサイズは どうやって確かめたら良いんでしたっけ……_○/|_
- 77 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 07:04:05.36 ID:FsaMqi3u.net]
- つかstd::count(vec.begin(), vec.end(), true)で一応動くみたいけど
中でbool型の等値判定していると思うんですが問題無いんでしたっけ……
- 78 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 07:45:13.57 ID:lohjPiFl.net]
- 不安だったらvector<bool>なんか使うな
それは素人が手を出していいものじゃない
- 79 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 09:24:55.78 ID:FsaMqi3u.net]
- 集合表現のためのビットマップのロジックを新たに新規に作るよりマシ、
という天才の判断
- 80 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 12:58:35.52 ID:cvW9PgHj.net]
- std::bitsetじゃいかんのか?
- 81 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:23:18.30 ID:FsaMqi3u.net]
- 天才か!
しかしstd::bitsetは要素数が整数の基本型のビット数を超えられないのでは……
- 82 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:33:00.76 ID:3ynmntXR.net]
- 要素数が本当に動的に変わるの?
- 83 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:49:31.61 ID:5dv7xI+Y.net]
- 2^32以上のサイズが必要だってこと?
何に使うの?
- 84 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:51:40.21 ID:FsaMqi3u.net]
- >>82
誤: 2^32 正: 32 当然32個以上の要素からなる集合をビットマップ式に表そうとしたとき 、整数の基本型1個では足りない
- 85 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:52:40.69 ID:rmK5g90q.net]
- int128の整数を使えば
- 86 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:52:47.30 ID:FsaMqi3u.net]
- 訂正orz
誤: 当然32個以上の要素からなる集合 正: 当然64個を超える要素からなる集合
- 87 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 14:04:02.94 ID:5dv7xI+Y.net]
- >>80
え?普通に32超えられるけど
- 88 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 15:15:47.45 ID:62Tyvx2d.net]
- 何かこういう訳のわからない事を書き込んでまで質問するならもっとわかりやすく書けよと思う
そもそも動的じゃないなら配列でええやろ
- 89 名前:デフォルトの名無しさん [2021/04/03(土) 17:28:40.18 ID:0zCBAqiq.net]
- c++関係あるかわかりませんが、テクスチャをバラバラに分割するロジックってどうやって作るんでしょうか?
例えばジグソーパズルや、このモザイク画のように、1枚の絵をバラバラにしたいのです。 ばらばらにしたものを戻すというゲームを作ろうとしています。 https://docs.gimp.org/2.8/ja/plug-in-mosaic.html これが作成したサンプル画像です https://i.imgur.com/abyDlBI.png グリッドの線がうっすら見えると思いますが、これを2次元配列とみなします。 適当に四角形を選択して、大まかな位置を決めます。 しかし、その後、四角形を三角形や五角形にするにはどうしたらいいのでしょうか? 隣り合う頂点をマージするなどすればできそうですが。 つまり、頂点という概念を使わないとこの機能は実現出来ないでしょうか? 板ポリゴンを2dとして映せば行けるかなと思ってます。 まあ、inkscapeなどで手作業で作れよって話ですけどね。 自動でパズル作ってくれたらいいなと思って。 エンジンはgodotです(´・ω・`)が、processingなどの環境でもいいです。 ヒントください
- 90 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 17:42:25.44 ID:5dv7xI+Y.net]
- 1ドットずつ走査して近似色以外は透明色で塗りつぶせば
- 91 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 17:43:36.15 ID:Hj8nCIUt.net]
- >>88
こういう話? C++ は関係なさそう。 https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%AD%E3%83%8E%E3%82%A4%E5%9B%B3 gimp のプラグインになってるんならソースありそうだからそれ見ればいいんじゃねとも思う。
- 92 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 18:06:49.53 ID:XWE78oAN.net]
- OpenGLとかグラフィックプログラミング系のスレで聞くべき・・といいたいところだが
この板は上から下まで、やれこっちが優れてるだのこのやりかたは汚いだの アホみたいなマナー・作法論しか議論していない板なのでたぶん書籍かWebを検索したほうがいい
- 93 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 18:11:14.04 ID:FsaMqi3u.net]
- 適当に点{ p1, p2, p3, ... } をばらまいてボロノイ境界を描いたら
ボロノイ境界が勝手に種々の多角形になりまくり……! あとは1つの区画内を点{ p1, p2, p3, ... }における画像の色とかの 適当な色で塗り潰せば良い 言うは安し……!!
- 94 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 22:25:01.27 ID:M/dPb3y2.net]
- とりあえず2Dゲーをいちいちポリゴンでやるのはやめといた方がいいかも・・
テクスチャの内容を一枚のビットマップとしていじった方が楽な気がする スワイプやドラッグでピースを動かすときは板ポリ使ってもいいかもしれんけど
- 95 名前:デフォルトの名無しさん [2021/04/04(日) 10:32:13.85 ID:b5JcZ1t5.net]
- >>89
その機能がゲームエンジンにあるかどうかすで >>90 そんな感じですね。 ボロノイというより、三角と四角と五角形で分割したいわけですが openglはできませんからね、擬似的にそう見せる方法でもいいのですが アホなので
- 96 名前:デフォルトの名無しさん [2021/04/04(日) 10:37:45.94 ID:b5JcZ1t5.net]
- >>93
ビットマップでやるってのは、マスでなんとかするってことですか?
- 97 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 10:58:31.72 ID:xtAOreBW.net]
- 領域を分割する頂点と辺を決めたらあとは各ピクセルごとにどの領域に含まれるかを判断すればいいように思うが
- 98 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 13:16:57.18 ID:Qg2Ccl1w.net]
- >>88のサンプル画像からすると、分割された領域の頂点は格子点上にないといけないっぽい
ボロノイ境界の交点は都合良く格子点上に来るとは限らないから、ボロノイ「領域」 の作図式にやるのはいろいろな点でイマイチ感が、
- 99 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 13:46:45.93 ID:Qg2Ccl1w.net]
- ちゅか要件定義的に(三角形は良いとして)
(1) 四角形や五角形への分割において凹図形を許容するのか否か (2) ある図形の1つの辺を2つ以上の隣接図形で共有することを許容するのか否か とか決めねばならない いや決めたからといって別に頂点決定アルゴリズムの妙案とか無いが_○/|_
- 100 名前:デフォルトの名無しさん [2021/04/04(日) 18:57:03.43 ID:b5JcZ1t5.net]
- ここは飛ばしてゲーム作ります(´・ω・`)、、、別に面白さと関係ないしね、、、。
- 101 名前:デフォルトの名無しさん [2021/04/04(日) 19:04:13.20 ID:b5JcZ1t5.net]
- processingで似たような事できますか?ちょこちょこ練習しようかな
ゲームエンジン使うほどでもないので https://processing.org/download/support.html これダウンロードできます?寄付しろと言われるんですけども
- 102 名前:デフォルトの名無しさん [2021/04/04(日) 19:10:44.91 ID:b5JcZ1t5.net]
- できた すみあmせん
- 103 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 08:59:16.68 ID:8ugS0e8D.net]
- c++言語をググるとビャーネも必ず出てきて
彼が設計者だとのことですが、コンパイラを作ってるのは彼ではないですよね 具体的に彼は何をしたの?
- 104 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 09:24:06.09 ID:YIdyLrea.net]
- 言語仕様の策定だろ
まあ最初のコンパイラー(コンバーターかも)ぐらいは作ってるとは思うけど
- 105 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 09:27:14.80 ID:cScuzdm0.net]
- 当初はCのプリプロセッサだから今で言うとTypescriptみたいなものだな
- 106 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 11:51:16.82 ID:zIvWtxBS.net]
- C++標準化委員会は誰が組織したんや?
- 107 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 11:53:41.43 ID:zIvWtxBS.net]
- それとも国際標準化機構(ISO)か何かの配下なの?
- 108 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 12:36:06.42 ID:ESZTLEZZ.net]
- >>105
K&R Cにクラスの概念を取り入れて見よう ということを思いつきcfrontを実装した TC++PL及びARMを著しC++を広く世界に知らしめた
- 109 名前:デフォルトの名無しさん [2021/04/05(月) 17:28:39.12 ID:2Tvboykg.net]
- そして世界は闇と混沌に包まれた……
- 110 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 19:55:46.69 ID:rNcivJgw.net]
- c++はクソだが、プログラマが求めたクソなのだ。
- 111 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 22:13:27.34 ID:zIvWtxBS.net]
- https://livedoor.blogimg.jp/namekkutake/imgs/3/f/3fc1c9fe.jpg
- 112 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 22:24:25.87 ID:vDuR7coO.net]
- ビヨーン先生の功績は
ハゲても立派なプログラマになれるという勇気をくれたことだろう
- 113 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 06:59:06.97 ID:rUOwZVXJ.net]
- 質問ですが
std::vector<SomeBigObject> arr; std::vector<int> indices; というデータがあり、 SomeBigObjectは大小比較可能だがarr自体は未ソートで、 for (int i = 0; i < N; i++) { indices[i] = i; } auto cmpFunc = [](int a, int b)->bool{ return (arr[a] < arr[b]); } std::sort(indices.begin(), indices.end(), cmpFunc); としてindices上で間接的にソートされているとき、 指定されたSomeBigObject x以上の値が現れるarr[i]の最小のiを高速に取得するには どうづればSTLでやるには良いですのん?
- 114 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 06:59:22.44 ID:rUOwZVXJ.net]
- arrがソートされていれば
auto cmpFunc2 = [](const SomeBigObject& a, const SomeBigObject &b)->bool{ return (a < b); } std::lower_bound(arr.begin(), arr.end(), cmpFunc2); で済む話なんだども、SomeBigObjectはコピーの手間がかかるので直接std::sortしたくないという、
- 115 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 07:00:25.45 ID:rUOwZVXJ.net]
- また手動で組めということなら明らかに組める
int custom_lower_bound(int bgn, int end, const int N, const SomeBigObject& x) { while (bgn < end) { int mid = bgn + (end - bgn) / 2; if (arr[mid] < x) { bgn = mid; } else if (x < arr[mid]) { end = mid; } else { while (mid > 0 && arr[mid - 1] == x) { mid--; } return mid; } } while (bgn < N && arr[bgn] < x) { bgn++; } return bgn; } みたいなことをしたら多分逝けるが、しかしこんなもん使う都度書きたくないし、 ライブラリとして展開して責任負いたくもないんじゃー STLはこういうケースのためにあり、論理的に実現できる以上やり方が考えられていないとおかしいはず……
- 116 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 07:42:07.19 ID:w+lldWjr.net]
- auto cmpFunc3 = [](int a, int b)->bool{ return (arr[a] < arr[b]); }
i = std::lower_bound(indices.begin(), indices.end(), cmpFunc3); arr[i]; じゃいかんのかしら
- 117 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 15:08:28.23 ID:rUOwZVXJ.net]
- >>115
lower_bound()の第3引数に検索キーxを指定する必要があるから >>115では解決しないっていうかビルドエラーなヨカン、 ここで気づいたが>>113のlower_bound()の例は間違ってたわスマン、orz ↓これに訂正 auto cmpFunc2 = [](const SomeBigObject& a, const SomeBigObject &b)->bool{ return (a < b); } std::lower_bound(arr.begin(), arr.end(), x, cmpFunc2); // 3番目の引数は検索キーx ところがソートされているindices上の検索キーは、検索したい実際のオブジェクトxから ただちには求められない(普通にやったら線形探索の手間がかかる、。n_
- 118 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 17:08:29.35 ID:mAZMW+WU.net]
- auto cmpFunc3 = [&](int idx, const SomeBigObject& xx)->bool{ return arr[idx] < xx; }
auto i = std::lower_bound(indices.begin(), indices.end(), x, cmpFunc3); arr[*i]; じゃあこれで
- 119 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 18:31:21.10 ID:rUOwZVXJ.net]
- >>117
ムリス、 つか次のように死ぬほど腐った書き方をしたらとりあえずできるた、 /// 間接ソート版lower_bound int custom_lower_bound(const std::vector<SomeBigObj>& arr, std::vector<int>& indices, const SomeBigObj& x) { // SomeBigObjの間接ソート用比較関数 // xのコピーを避けるため[&](a, b)とする。 auto cmpFunc = [&](const int a, const int b)->bool { // 有り得ないindex値が渡ってきたらxとみなす。 const SomeBigObj& obj1 = (a < 0) ? x : arr[a]; const SomeBigObj& obj2 = (b < 0) ? x : arr[b]; return (obj1 < obj2); }; // lower_bound()の第3引数(検索キー)を有り得ないindex値にしておく。 auto found_it = std::lower_bound(indices.begin(), indices.end(), -1, cmpFunc); // Indexに変換 return (int)std::distance(indices.begin(), found_it); } 動作するサンプル例: https://ideone.com/xbSHmi
- 120 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 00:39:13.23 ID:C05ugDVV.net]
- const int lb = std::distance(indices.begin(),std::partition_point(indices.begin(), indices.end(), [&x,&arr](const int i){ return arr[i] < x; }));
これでどうかな?
- 121 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 01:13:46.41 ID:B+YGKOyD.net]
- >>115
エピさんかしらん
- 122 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 01:17:07.25 ID:KcAzRCeR.net]
- >>118
動くってば ideone.com/v9R75s
- 123 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 05:42:50.50 ID:FlnHFJBF.net]
- >>121
しらそん おま環
- 124 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 06:26:08.77 ID:hpqJGpH8.net]
- >>122
動かないのをおま環言うのはよく聞くがその逆を聞いたのはこれが初めてかも
- 125 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 07:24:58.99 ID:FlnHFJBF.net]
- 確かに動いているように見えるが(呼び出し回数も2分探索相当に見えるが)
Compにそんな引数渡して委員会?! 錯覚じゃないの;;;
- 126 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 08:00:02.53 ID:FlnHFJBF.net]
- std::lower_bound(first last, value, comp);
という呼び出しにおいて、compはcomp((firstやlastと同じ型のiteratorが指す要素), value) という呼び出され方しかされないこと、および valueの型はfirstやlastが指す要素の型とま無関係に好きな型にして良いと規格で決まっている?!
- 127 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 09:20:20.01 ID:F9L3hm15.net]
- チラッと規格見た限り
value は first、last と無関係でいいし comp の第一引数はfirst、lastのiteratorが指す型で、第二引数はvalueの型に決まっているように見える
- 128 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 12:44:59.78 ID:94shRdbf.net]
- >>51じゃないが、オブジェクト指向で設計する意味が分からなくなった
汎用性の高いフリー関数が沢山あればそれで良いじゃん
- 129 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:37:37.40 ID:2guWvkPP.net]
- >>126
> comp の第一引数はfirst、lastのiteratorが指す型で、第二引数はvalueの型に決まっているように見える そこは決まってないと思う。
- 130 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:42:26.98 ID:2guWvkPP.net]
- ・・・いや、 lower_bound() 限定なら引数の順番もその想定でいいのか。
upper_bound() だと comp(value, x) になったりするから、交換可能にしとくのがいいけど、 片方だけ使うなら交換可能にする必要はない、と。
- 131 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:44:08.41 ID:2guWvkPP.net]
- 参照: https://timsong-cpp.github.io/cppwp/n4861/alg.binary.search
- 132 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:45:24.56 ID:x8RK+cZQ.net]
- >>128
requiresのとこは見た?
- 133 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 17:04:44.94 ID:x8RK+cZQ.net]
- c++20からprecond
- 134 名前:itionsって書き方に変わったのか。
>>129 upper_boundのpreconditionsには第一引数がvalueのほうしか書いてないよ [] - [ここ壊れてます]
- 135 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 06:24:25.70 ID:ByNsu0yr.net]
- 質問者ですレスdクス、
>>117の書き方で>>121が正しく動いているように見えるのは未定義動作でなくてSTLの仕様ってことでFA? >>126や>>129のような巧妙っていやー巧妙だが風が吹いたら桶屋が儲かるみたいなかりにくい仕掛けなのは ステパノフあたりの発案なんですかね……
- 136 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 10:00:06.97 ID:b/WIqkut.net]
- >>132
あ、ごめん。比較関数の引数順を交換可能にするのは lower_bound, upper_bound 両用にすることを想定しての話。
- 137 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 16:09:17.02 ID:uZSkMyuO.net]
- 生魚にあたって、
入院した病院の天井みながらSTL考えてたもんな
- 138 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 16:25:55.36 ID:/Z+9yHN3.net]
- ステパノフ?
- 139 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 23:02:01.67 ID:6aXKgzGP.net]
- ニダーランが終了になるそうだ
もう糞スレは立てにくくなるな ざまあ
- 140 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 01:15:08.43 ID:iqXbiQSS.net]
- >>135
STLなんてかっこつけたネーミングだけど やってることはリニアサーチwww
- 141 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:44:34.26 ID:B1MFSAev.net]
- C++11でのstd::swapは、次のようなコードになっているそうですが、
仮に、もし(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに nullptr的なものが代入されるんでしょうか。 仮にt1のポインタ的なメンバにnullptr的なものが代入されない場合、 (2)でt1への代入に置いて何が起きるのか心配です。 質問の仕方を変えるならば、 share_ptrは参照カウンタ方式ですのでカウンタのアップ/ダウンは正確でなければ なりませんが、以下の例では、いったいどの行のどの演算子(またはどの部分)で カウントアップ/カウントダウンされるんでしょうか。 template<typename T> void swap(T& t1, T& t2) { T temp = std::move(t1); // (1), or T temp(std::move(t1)); t1 = std::move(t2); // (2) t2 = std::move(temp); // (3) }
- 142 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:45:42.89 ID:B1MFSAev.net]
- >>139
誤:仮に、もし(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに nullptr的なものが代入されるんでしょうか。 正:(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに nullptr的なものが代入されるんでしょうか。
- 143 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:58:14.49 ID:O38yN+C3.net]
- >>138
C++03にもstd::binary_searchあるぞ
- 144 名前:はちみつ餃子 mailto:sage [2021/04/09(金) 12:00:21.75 ID:foJJo5gI.net]
- >>139
> nullptr的なものが代入されるんでしょうか。 この場合はされる。 ムーブセマンティクス一般においてはムーブ後の抜け殻は「無効なオブジェクト」なのでアクセスに対して保証がないことがあるが、 標準ライブラリのスマートポインタについては所有権を移動させた後にそれが空であり メンバ関数 get で nullptr が返ることも、 nullptr と == で比較して真であることも保証される。 > いったいどの行のどの演算子(またはどの部分)で > カウントアップ/カウントダウンされるんでしょうか。 = がその役割を持っている。 ムーブコンストラクタとムーブ代入演算子によってカウントされる。
- 145 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:02:12.29 ID:B1MFSAev.net]
- >>140
どうやら、 (1) の中央の = では、TからTへの move-construc
- 146 名前:torが呼び出され、
(2)や(3) の中央の = では、TからTへの move-assignment operatorが呼び出される、 ということのようですが、 Tのmove-contructorやmove-assingment operatorは、ユーザーの実装次第で、 ユーザーがそれらを明示的に書かなかった場合の「デフォルトの定義」は 現在もまだ論争中で、標準的な仕様が決まってない、ということらしいですね。 間違っていれば指摘してください。 [] - [ここ壊れてます]
- 147 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:11:46.34 ID:fGHst4+7.net]
- >>141
そんなのも、ちょっとc\c++をかじったことあるなら 誰でも書けるじゃん わざわざ誰が書いたかわからないようなものより自作できるなら自作するだろ
|

|