- 1 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:17:05.84 ID:wmfpIKt/.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 (正しくはpart138) mevius.5ch.net/test/read.cgi/tech/1535353320/ C++相談室 part139 https://mevius.5ch.net/test/read.cgi/tech/1538755188/ C++相談室 part140 https://mevius.5ch.net/test/read.cgi/tech/1547326582/ C++相談室 part141 https://mevius.5ch.net/test/read.cgi/tech/1550772463/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- - VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 511 名前:はちみつ餃子 mailto:sage [2019/05/09(木) 18:44:16.05 ID:IVoLxnXn.net]
- >>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。
- 512 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:53:31.44 ID:vbHvKAwn.net]
- >>511
insertのが速いんでね? resizeしてmemcpyになるはず
- 513 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 23:40:45.34 ID:q7ofaYCv.net]
- アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな
- 514 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 00:47:30.50 ID:5C678nxv.net]
- ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね
- 515 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:00:01.95 ID:KAkBQh2y.net]
- &b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな
- 516 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:08:59.15 ID:pPfi71KH.net]
- sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも
- 517 名前:はちみつ餃子 mailto:sage [2019/05/10(金) 12:01:59.87 ID:g2QrvVju.net]
- >>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。 (名前が妥当であれば。)
- 518 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:02:43.61 ID:UhKi+qPE.net]
- 嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね? https://gogotsu.com/wp-content/uploads/2019/05/01-9.jpg
- 519 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:10.83 ID:curN/h5M.net]
- >>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか
- 520 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:16.55 ID:TAwz/zT/.net]
- javascriptやん
- 521 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:36:57.50 ID:tfYAY6pz.net]
- こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる
- 522 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:47:05.61 ID:oOPMkjEw.net]
- てかこんなもの韓国に出すのね
安くなさそう ってもしや北の方?
- 523 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:53:19.07 ID:oOPMkjEw.net]
- parseInt(Num).lengthって動かなそう
- 524 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:57:58.16 ID:TAwz/zT/.net]
- ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw
- 525 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 22:59:11.84 ID:HK1/2Yro.net]
- 型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。
- 526 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:25:31.58 ID:u3uVdMgu.net]
- ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか シーンクラスが管理クラスのインスタンスを持ちたくありません
- 527 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:30:31.35 ID:0WVRNDv3.net]
- >>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね
- 528 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:55:31.69 ID:tshfuAdx.net]
- >>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか
- 529 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 03:16:15.93 ID:xsmcwCcm.net]
- 早速情報漏洩やらかしたの?
- 530 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:30:07.92 ID:f5HniSEP.net]
- >a.insert(a.begin(),&b[0],&b[sizeof b]);
> これ、添字オーバーしてるけどメモリエラーとかにならないの?
- 531 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:54:36.87 ID:RjxICFG6.net]
- >>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス それは普通の実装ではアクセスされることはない 規格的にも最後の次の要素へのポインタだけは未定義じゃない
- 532 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 11:55:52.83 ID:Y1ZlGg0p.net]
- >>530
アクセスしてるからダメそう
- 533 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:40:07.82 ID:3XjGQ6E0.net]
- []はただのアドレス計算じゃん
- 534 名前:デフォルトの名無しさん [2019/05/11(土) 12:42:52.29 ID:DVWj7ai3.net]
- &p[N]はp + Nと同じって規格にあったっけ?
- 535 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:44:31.45 ID:RjxICFG6.net]
- 確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう
- 536 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:56:49.51 ID:FaKAPAIh.net]
- >>533
a[i]は a+i ではなく *{a+i}
- 537 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 13:12:17.25 ID:2v2BzL6t.net]
- 経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)
- 538 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 18:44:16.82 ID:fU686pnk.net]
- &*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?
- 539 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 06:58:46.18 ID:x4ccFx6b.net]
- >>530
int a[5]; int *p = &a[5]; というコードが有効、つまり 「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、 という仕様から、この場合は許される、というのが >>531 の指摘か。 一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。 流れの元になった >>508 を見返したら、 a.insert(a.begin(),&b[0],&b[sizeof b]); これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。
- 540 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 07:43:52.68 ID:2y1+p9UL.net]
- >>530
>>a.insert(a.begin(),&b[0],&b[sizeof b]); >> > >これ、添字オーバーしてるけどメモリエラーとかにならないの? 508だけど、これは a.insert(a.begin(),&b[0],&b[sizeof b]); こっちの間違いです。ごめんなさい。 a.insert(a.end(),&b[0],&b[sizeof b]); &b[sizeof b]); この部分は b+sizeof(b) これなら問題ない感じ? どちらでも動くけど、たまたまいてる可能性捨てきれないから不安なんだよね。 実際のソースはsizeof(b)がbに格納されているデータのサイズを示していて、 char b[256]; int s = read( fd, b, sizeof b); a.insert(a.end(),&b[0],&b[s]); みたいな感じで書いてます。 んで、b最大数来た場合にちゃんと動くか気になったというわけっす。 int s = read( fd, b, (sizeof b)-1); 無難にこれの方がいいですかね?
- 541 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:19:05.13 ID:k8bUqGvO.net]
- >>539
>int *p = &a[5]; これは多分だめで、ポインタ値としての存在なら許される int *p = a+5;
- 542 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:53:09.39 ID:nuZIUjqi.net]
- ややこしいからoperator <<を定義しようw
- 543 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:25:00.10 ID:8/5ODvoI.net]
- VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね
- 544 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:25:11.86 ID:yr8YjJOU.net]
- std::transformって並列処理されてますか?
- 545 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 23:20:05.82 ID:jFoQmc6B.net]
- c++17のparallel版使えば並列実行されるかもしれない
- 546 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 01:24:36.27 ID:RKe/NLvg.net]
- visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら OpenMP>普通にfor≧transform だった
- 547 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:49:38.54 ID:YS57w6Jq.net]
- おとなしくpthead使えよ。
- 548 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:56:12.40 ID:WUu3P+2G.net]
- 非並列使ったならそりゃそうなるだろ
- 549 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:02:33.17 ID:1v50lv4I.net]
- struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか? A a; B b = a; みたいにしたいんですけど親を派生先にキャストはできないので困ってます
- 550 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:06:57.91 ID:mZDDPYlt.net]
- struct B : public A
{ B* operator=(const A& a){ this->hoge = a.hoge;} }; これ初期時にも使えるんかな
- 551 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:25:05.62 ID:1v50lv4I.net]
- コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね
- 552 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:28:08.55 ID:mZDDPYlt.net]
- スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな? なんか危ういからやろうともしなかったが
- 553 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:25:17.13 ID:/dAesd8e.net]
- cloneメソッド用意するとか
- 554 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:31:42.80 ID:ebJ8HHSX.net]
- >>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。 代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。
- 555 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:33:37.60 ID:C3C4SHXA.net]
- 普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A) B::operator =(const &A) A::operator B() 雑なキャストでよければdynamic_cast<A>でおk
- 556 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:38:27.18 ID:C3C4SHXA.net]
- ↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);
- 557 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 11:40:14.21 ID:74mGoL8y.net]
- >>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。 あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw
- 558 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:20:00.24 ID:PgzYowjZ.net]
- 549です
解決しましたありがとうございます 以下のように書いたら思っていたことが出来ました (派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした) 代入は現状使う予定がないので大丈夫です B::B(const &A a) : A(a) {}
- 559 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:17:29.46 ID:mr2QiBZl.net]
- その内容だったら=defaultでいいよ
- 560 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 21:32:58.41 ID:/aEDSlbd.net]
- 引数付きコンストラクタって、=default使えるの?
- 561 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 22:09:55.18 ID:jJO9F8Je.net]
- 使えないよね
うかうかっと読み過ごしてたわw
|

|