C++相談室 part153

■ このスレッドは過去ログ倉庫に格納されています
2020/10/10(土) 23:18:20.00ID:i4F+i14Y
https://mevius.5ch.net/test/read.cgi/tech/1589424805/
※前スレ
C++相談室 part152
https://mevius.5ch.net/test/read.cgi/tech/1594528940/

テンプレおしまい
435デフォルトの名無しさん
垢版 |
2020/10/30(金) 11:34:39.85ID:7MkyV1Cp
https://cpprefjp.github.io/reference/tuple/apply.html
436デフォルトの名無しさん
垢版 |
2020/10/30(金) 11:37:53.83ID:7MkyV1Cp
https://www.fluentcpp.com/2020/02/07/transform-adaptor-equivalent-in-cpp/
437デフォルトの名無しさん
垢版 |
2020/10/30(金) 11:41:09.18ID:7MkyV1Cp
>>433
ループ分解されて要素分コード増えてる可能性もあるな
2020/10/30(金) 13:24:53.40ID:Z0VCec0D
forよりも関数的に書いた方が順序は気にせんでいいってメッセージを込めることはできるわけだが、
まあそういう風にかける場合って大抵forで書いても可読性下がらんほど簡易な内容のことが多い。
2020/10/31(土) 00:26:11.33ID:T4Ek6w2r
ヒエッ…、、OpenMPし放題…!
2020/11/01(日) 15:21:18.11ID:iuijWT2g
競プロで使いたいのですが
if i = 0 then return 0
elif i > 0 then return i - 1
を出来るだけ早く求めるには何かいい方法ありますかね?
ビット演算とかでなんとかなりませんかね?
2020/11/01(日) 15:26:15.37ID:Ncbqgsya
>>440
それの速度が競プロで問題になることなんてないだろう。
そんなこと気にするよりアルゴリズムの計算量のオーダーを小さくするとか枝刈りをしっかりするとか有意義な方に頭を使った方がいい。
442デフォルトの名無しさん
垢版 |
2020/11/01(日) 15:26:18.66ID:BdB3gM+x
unsignedですか?
2020/11/01(日) 15:36:25.10ID:f5GbRfBo
simdの比較使えば結果がビットマスクで取得できるのでそれを使うのが定石
両方計算してビット演算で選択
c++関係ない
2020/11/01(日) 15:38:18.92ID:Lkejt9vc
>>440
数値のビット数が解っているなら高速化できる
2020/11/01(日) 15:49:40.49ID:Lkejt9vc
>>440
ていうか比較は一回でいいだろコレ
なんで2回も余計に比較してんだ?
return i>1?i-1:0;
2020/11/01(日) 15:50:59.41ID:Lkejt9vc
>>440
ていうか比較は一回でいいだろコレ
なんで2回も余計に比較してんだ?
ちょっと間違えた
return i>0?i-1:0;
2020/11/01(日) 16:00:31.30ID:Lkejt9vc
>>440
elifのあとはなにを返すんだや?
モロに中途半端やないかいワレ
2020/11/01(日) 17:02:44.45ID:h5xlMYDq
つか>>440はelseが何かわからんが、
iがi≧0でやってくるのならデクリメントの飽和演算に見える件について:
2020/11/01(日) 17:10:40.93ID:h5xlMYDq
SIMD使うと飽和演算は楽勝かもしれんが、4個とか同時に並列に計算するんでなければ
かえって遅いんじゃ…
2020/11/01(日) 19:21:41.23ID:PTqWSgE4
>>440
アセンブラだったら、
 sub eax,1
 jnb lab1
 xor eax,eax
lab1:
 ret
でおしまい。最大で4クロック。
jmp命令は1つだけ。同じことをCで書くなら、
if (--i < 0) {
 i = 0;
}
return i;
とか。
2020/11/01(日) 21:20:20.31ID:f5GbRfBo
クロック数は蛇足でしょ
2020/11/01(日) 23:07:30.49ID:gRIt+Ld+
減算が必ず実行されるのはもったいない

... and eax,eax
... jz f@
... dec eax
@@:
... ret
2020/11/01(日) 23:12:12.57ID:gRIt+Ld+
test ってあったかな...
2020/11/01(日) 23:32:16.35ID:h5xlMYDq
and eax,eaxも同じようなものなのでは…
どっちも多分パイプライン1段消費

ていうか投機的実行から戻す際のペナルティーは
常にデクリメントする>450の方が小さい可能性が微レ存
知らんけど
2020/11/02(月) 00:26:45.06ID:dW4oDZpY
そっかー
投機的実行はまったく念頭にありませんでした
i が 0 である確率が小さいと考えるのかしら
2020/11/02(月) 01:48:22.41ID:U5Xnw0i6
sub eax,1
adc eax,0
でなんとかなんないの?
457デフォルトの名無しさん
垢版 |
2020/11/02(月) 14:18:33.78ID:WhiKrslV
>>450
一瞬でも < 0 になったらまずい環境なら
if(--i < 0) はダメ
2020/11/02(月) 15:41:23.80ID:OFRBeKTl
>>452
減算を行う場合の方が頻度が高いと予想されるので、>>450の方がその場合に
命令数が少なくなるので平均速度は速い。
2020/11/02(月) 15:44:36.12ID:OFRBeKTl
>>456
そのコードは凄い。
2020/11/02(月) 16:02:50.72ID:sYYC+nm2
>>456
キャリーちゃんか
461デフォルトの名無しさん
垢版 |
2020/11/04(水) 00:22:15.96ID:eR5jspY1
Macで環境構築どうすればいいですか
適当に記事あさればいいですか
2020/11/04(水) 00:32:44.91ID:pJnXfGcc
yes
2020/11/04(水) 08:22:43.71ID:3PEz6xa2
>>461
新し目のC++使うならhomebrewでg++-9でも入れるのがベターかも。
たとえばstd::filesystemとかcatalinaのXCode(clang++)でも対応したんだが、
バイナリを古いmacに持ってったら予想通り動かんかった。
464デフォルトの名無しさん
垢版 |
2020/11/04(水) 20:11:40.32ID:X2fHUOCE
自クラスの終了時のコールバックメソッドで…delete this;すると…うまく消えるんだけど…。
コールバックメソッドは…boolを返す…delete this;した後も…メソッドは動き続けて…るんだよ…。
std::coutも反応してる…メインスレッドとかで…処理されているからですか?何故かが…解らない…。
465デフォルトの名無しさん
垢版 |
2020/11/04(水) 20:26:01.44ID:X2fHUOCE
464です…。いろいろ調べたら…できるみたいですが…なんでできるのかは…解りません…。
2020/11/04(水) 20:30:16.22ID:tdZ4i2Gl
thisインスタンスに影響しない関数のコードは多分、C言語の関数みたいに生成される。
関数のコードは不変な実体だと思う。
2020/11/04(水) 20:50:15.92ID:H9SHlq4g
難しく考えすぎ
extern "C" void the_call_back(struct obj_ptr* This)
{
free(This);
}
こうなってるだけだよ
*Thisを殺しても関数から戻るためのスタック情報はどうもせんだろ
468デフォルトの名無しさん
垢版 |
2020/11/04(水) 21:35:20.66ID:rY/M/1xY
struct S1;

using V1 = std::variant<S1>;

struct S1
{
  std::vector<V1> m_v;
};

これ合法?
2020/11/04(水) 21:39:36.00ID:occL3fQ7
ダメ
470デフォルトの名無しさん
垢版 |
2020/11/04(水) 21:44:35.56ID:rY/M/1xY
主要3コンパイラでコンパイル出来るうえ
https://python5.com/q/djlpoyyw
紹介してる人が居る。
471デフォルトの名無しさん
垢版 |
2020/11/04(水) 22:56:42.61ID:rY/M/1xY
駄目な根拠わかりませんか?
2020/11/05(木) 00:49:04.74ID:WV05kVNu
>>468
https://timsong-cpp.github.io/cppwp/n4659/res.on.functions#2
> In particular, the effects are undefined in the following cases:
> ...
> - if an incomplete type is used as a template argument when instantiating a template component, unless specifically allowed for that component.
473デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:14:10.93ID:E+L4EB1M
C++17以降、std::vectorは不完全型を許容していて、std::variantは
using V1 = std::variant<S1>;
の時点でインスタン化されていない。

これはどう解釈すればいいのかな?
474デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:20:36.91ID:E+L4EB1M
これが合法なら良かったんだけど、どうも無理っぽいな。
475デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:46:23.37ID:E+L4EB1M
using V1 = std::variant<S1>;
の時点では、テンプレートの明示的なインスタンス化はしていないし、使用していないので暗黙的なインスタンス化もされていない。

ってことでいいよね?
476デフォルトの名無しさん
垢版 |
2020/11/05(木) 01:54:08.91ID:E+L4EB1M
boost::make_recursive_variantやstd::anyを知らないわけじゃないんだけど、オブジェクトが必要になるたびにnewするならC#やJavaで十分なわけで、C++のうまみ成分はこういうところにあると思うんですよね。
何とかなりませんかね?
477デフォルトの名無しさん
垢版 |
2020/11/05(木) 02:27:49.98ID:tM7hzUED
>>463
ありがとうございます。
Mojaveあたりです。
2020/11/06(金) 16:04:48.24ID:cCU0l/b0
コンストラクタの引数と初期化リスト上のメンバー変数が同じ名前でも、ビルドが通って意図どおりに動いちゃうのだけど、これって仕様通りの動作?

こんなん
: apple(apple)
2020/11/06(金) 16:58:12.08ID:O5a96eYY
>>478
仕様通り。 問題ないし、むしろ名前を一致させるスタイルを好む人もいる。
2020/11/07(土) 17:39:09.77ID:gsFmAuV5
Foo::Foo(const Fruit& apple)
: apple(apple),
 banana(apple),
 orange(this.apple) // できない
{

}
が問題無いのか左様か、

いや待てFoo::appleが実はFruitクラスでなくてFruit2クラスで、
orangeにFruit2クラスを受け取るコンストラクタしか持たずかつconstメンバだったらどうすんじゃ…
2020/11/07(土) 17:53:59.86ID:gsFmAuV5
Foo::apple、Foo::banana、Foo::orangeではなくて
Foo::m_apple、Foo::m_banana、Foo::m_orangeとしておけば悩む必要は無い
ヘッダファイルでもこの順で宣言したとして、

Foo::Foo(const Fruit& apple)
: m_apple(apple),
 m_banana(apple),
 m_orange(m_apple) // できる
{

}
でおk
2020/11/07(土) 17:56:49.27ID:24XfCTPm
>>480
普通に出来るやで。 this->apple の間違いじゃろ。

メンバの初期化順は (初期化リストの順序と関係なく) クラス定義内でデータメンバを書いた順序なので気を付けてな。
483デフォルトの名無しさん
垢版 |
2020/11/07(土) 17:57:34.44ID:CPm1qeuk
this
javascriptのやりすぎで脳が壊れたか
2020/11/07(土) 18:00:03.51ID:24XfCTPm
>>481
名前を同じにしてもうたらまずいケースがあるやないけということを >>480 は言ってるので、
名前変えればいいよってのは的外れ。
2020/11/07(土) 18:13:54.67ID:gsFmAuV5
>orange(this->apple)
ホンマやΣ(゚д゚;)!いけたわ、
警告をいつもエラー扱いにしているからてっきりエラーかとオモテタ、(言い訳
2020/11/07(土) 18:30:43.14ID:2NiwF/8v
みなさまthx
classのときはメンバ変数に何らかのprefixなりsuffixなり付けてるから名前が被ることはなかったのだけど、構造体は何も付けないことが多くて、あれ、これってOKなんだっけ、って今更ながら気になってしまいました。
メンバ定義順に初期化ってのも知らんかった…
2020/11/07(土) 20:28:30.69ID:CTlV0YTN
>>485
いや、エラーだろ
2020/11/07(土) 22:09:33.18ID:gsFmAuV5
warning C4355: 'this' : ベース メンバー初期化子リストで使用されました。
やもーん
489デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:24:32.33ID:CdQvP3Xl
みんなC++でなにしてるの
490デフォルトの名無しさん
垢版 |
2020/11/07(土) 22:24:57.26ID:9rEAH6th
polymorphic_allocator対応ですね。
2020/11/07(土) 22:55:56.65ID:8rmSPqJO
>>489
c++仕様のお勉強。マウントかますためだけにお勉強。
2020/11/07(土) 23:11:57.20ID:yroa9NTK
ジョークに聞こえるがまじでそういうやつがいるからな
2020/11/07(土) 23:39:31.38ID:24XfCTPm
>>485
念のため規格の当該箇所を探してみたら this についてわざわざ脚注で書いてあったわ。
https://timsong-cpp.github.io/cppwp/n3337/class.base.init#12
初期化順序はくれぐれも気を付けんとあかんけど、this が駄目ということはないのは間違いない。
494デフォルトの名無しさん
垢版 |
2020/11/07(土) 23:42:39.92ID:9rEAH6th
おせーな。
5分で探して来い。
2020/11/14(土) 18:09:43.36ID:FszncLid
VC++って今でも最先端のシステムでも使われていますか?
2020/11/14(土) 18:57:11.05ID:ovQs8svh
>>495
うちの会社では 2008年くらいからは C++ ではアプリは作っていなくて、もうすっかり C# に移行してしまっているようです…
いや、私は施設管理をやっているので、会社の深いところはさっぱりわからないんですけど
2020/11/14(土) 18:58:45.49ID:ovQs8svh
mfc42.dll
の内部バージョン違いに、ほとほと懲りたらしいです……
2020/11/14(土) 19:03:42.05ID:liKT9ZZB
あれはひどかったな
2020/11/14(土) 19:21:56.26ID:IHUe5vhA
>あれはひどかったな
ちょっなんで??
DLLにstd::vector<T>やstd::string<T>とか渡そうとした???
2020/11/14(土) 19:23:33.64ID:liKT9ZZB
仕様が違うものを同じファイル名にするなって話
ISO/IEC14882のライブラリは全く無関係
2020/11/14(土) 19:25:17.74ID:IHUe5vhA
手製DLLへのデータ渡しににはchar[]とか基本型onlyとして
CRTをスタティックリンクしたらランタイムのインストールすら不要
で完全解決…!

全要素手製でコントロールできればの話ではある
2020/11/14(土) 19:37:00.66ID:liKT9ZZB
なんか話になってないな
つまらんからやめる
2020/11/14(土) 19:41:20.95ID:wQlu6eHI
std::string<T>て
2020/11/14(土) 19:56:02.78ID:IHUe5vhA
CRTではなくてこの場合MFCをスタティックリンクしたらやったスマンコ、
2020/11/15(日) 12:36:52.05ID:YXN+C+qx
>>496
ありがとうございます
2020/11/15(日) 12:45:20.15ID:z250o8Kw
VC++ってことはプラットフォームはWindows固定か
Windows前提ならC++使い続ける理由は特にないね
507デフォルトの名無しさん
垢版 |
2020/11/15(日) 14:27:41.73ID:1NoBqfO6
MFCなんか使うからだろ
自己責任
508デフォルトの名無しさん
垢版 |
2020/11/15(日) 15:39:12.99ID:ZF6xjL9s
webサイトぐらいしか作った事無いド素人なのですが
cheatengineのようなツールはどうやって作るのですか?
509デフォルトの名無しさん
垢版 |
2020/11/15(日) 16:01:31.41ID:fUqPXTtq
ツールはReactかVueですね。
510デフォルトの名無しさん
垢版 |
2020/11/15(日) 16:32:14.80ID:U+/Dwi3J
マルチ禁止
2020/11/15(日) 21:02:27.25ID:XnBy/n8J
>>510
そのマルチポスト禁止っていうのは fj の時代ならまだしも、2ch に当てはまるのですか?
マルチポストとクロスポストの違いはなんですか?
2020/11/15(日) 21:29:20.86ID:UQYtdYHl
自分の頭で考えることを放棄したマニュアル人間
2020/11/15(日) 21:57:12.59ID:9LlY7wvz
いまは2chは無いんだよおっさん
2020/11/15(日) 22:32:36.77ID:UQYtdYHl
くだらねえ突っ込みだな
それで誰かはっとする奴がいるとでも思っているなら
どうしようもねえバカ野郎だ
2020/11/15(日) 23:02:36.34ID:QB7zB470
なんにせよスレチなんで
2020/11/15(日) 23:22:10.25ID:AQ/HY5jp
>>511
せっかくちょい調べて回答したのに他スレで一時間前に回答が出てたらイラッとするのは当然だろ
2020/11/15(日) 23:35:29.19ID:XnBy/n8J
>>516
確かにその感情は理解できます
2020/11/16(月) 00:15:05.39ID:tkpwZn9D
>>508
windowsだけで動けば満足ならメモリ読み書き関連はwinapi
デバッガ、逆アセ関連は pythonによるバイナリ解析技法 とかそれに似たような本読めば少しは載っていると思います。
2020/11/16(月) 04:42:45.86ID:tkpwZn9D
スレを全く読まないで反射で答えてしまいました。
今気付きました、すみませんでした。
2020/11/16(月) 06:44:11.49ID:OL16ghBV
>>516
心が狭い、というかてめーの都合だろそれ
勝手にイラついてろよ、こっちにゃ関係ねえわ
2020/11/16(月) 07:50:58.47ID:u3jXok4q
>>520
マルチするのはお前の都合だろ。人の時間を無駄に使わすな
2020/11/16(月) 07:59:26.89ID:OL16ghBV
互いにてめーの都合だからな
知らん馬の骨に命令すんな
何様のつもりだ
2020/11/16(月) 08:01:26.23ID:QRq3yxwv
時間を無駄に使うって>>516みたいな話?
他で解決済みだったら無駄になるって意味がよくわからん。回答したらちゃんと感謝してほしいとか?
2020/11/16(月) 08:05:45.08ID:OL16ghBV
ここは技術板なのに
クロスポストできるシステムを作ろうともしない
フリーライダーが吠えてるだけだ
2020/11/16(月) 08:26:08.12ID:GdRLcc7O
bool GoToHell(bool gotoTravel, bool gotoEat)
{
return (gotoTravel || gotoEat);
}
2020/11/16(月) 09:04:54.68ID:T8j9su4c
>>522
お前は自分のことを馬の骨だと思ってんのか。自覚はあるんだなw
2020/11/16(月) 10:24:06.29ID:OL16ghBV
>>526
だからどうした?
ぐうの音も出なくてそんなくだらんことぬかしたか?
2020/11/16(月) 11:03:12.40ID:2ijHHLJY
ぐう😪
2020/11/16(月) 11:23:44.07ID:hTDmnJOp
腹ペコかよ
2020/11/16(月) 11:36:22.45ID:OL16ghBV
勝負あったな
これからもマルチであろうが何であろうが
どこにどんな投稿をしようが口出しは無用だ
収穫ゼロでご苦労だったな
531デフォルトの名無しさん
垢版 |
2020/11/16(月) 12:57:31.91ID:sF1WJXNT
仮に百歩万歩譲ってクロスポストの機能が無いからマルチを許すとしても
マルチ投稿にはオリジナルのスレとレス番へのリンクの同時投稿を義務付けるべき
2020/11/16(月) 13:00:20.03ID:OL16ghBV
義務違反したらどうなるんだ?
実効性のない俺ルールを勝手に吠えてろセンズリこき野郎
2020/11/16(月) 13:07:05.30ID:BvdXplQc
義務ではないよ
答えの付かない質問だけが残ってるのって寂しくない?
質問に答えが付かないって認識が定着しちゃうとコミュニティの衰弱にも繋がる
悲しいね
2020/11/16(月) 15:15:24.81ID:OL16ghBV
どう書けば回答が付きやすいかなんて
みんなそれぞれ考えてることだ

俺様が考えたベストな方法なんて誰も興味ねえんだよ
コミュニティの衰弱に繋がるキリッだっておバンバン

俺様が自分の頭で考えてるのはまだマシなほうで、
fj時代で頭の更新が止まったままの化石か
古代遺跡から発掘した碑文に洗脳されたバ…若者か知らんが
おおかたそういう手合いのマニュアル人間だろどーせ
2020/11/16(月) 16:33:15.96ID:MWCEXPaa
誰か教えてほしい。データベースの基本中の基本だと思うけどよくわからんです
数万の部品の名前があるとして簡単にa,b,c,d,eとする
すでに、c,b,a,eと登録されているところに新たにdを登録するとき、順番も大事で、
d,c,b,a,eとなります
ここで、cを削除したいとき、この順番だけで並んでいると数万のデータをひとつずつ一致確認していかなくてはいけないので
めちゃくちゃ時間がかかる。よってソートして順番もひもづけした
a4,b3,c2,d1,e5というのを作っておいて、cを削除するときはここから2分探索でcは2番目というのがわかるのでd,c,b,a,eの2番目のcを
削除するのと同時に、a4,b3,c2,d1,e5のc2も削除するとこちらはa4,b3,d1,e5となってしまう。でもこちらで欲しいのは
a3,b2,d1,e4で、つまり、2以上の数字は全部マイナス1して回らないといけなくなって、ここにまた時間もかかってしまう
これは新しいデータを登録するときも同じ原理でプラス1しないといけないです
もっとスマートないい方法はないでしょか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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