- 1 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 00:03:49.04 ID:Hj6igpz/.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ: C++相談室 part127 echo.2ch.net/test/read.cgi/tech/1474636291/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ■ shared_ptr で 標準ライブラリのFILE構造体ポインタをラップしよう class FILE_Ptr : public shared_ptr<FILE> { struct FILEDeleleter { void operator() (FILE* fp) const { if (fp != NULL) { fclose(fp); }} }; public: FILE_Ptr(FILE* fp = NULL) : shared_ptr<FILE>(fp, FILEDeleleter()) {} operator FILE* () { return get(); } template<typename T> bool operator == (const T& obj) const { return get() == reinterpret_cast<FILE*>(obj); } template<typename T> bool operator != (const T& obj) const { return get() != reinterpret_cast<FILE*>(obj); } };
- 164 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 20:31:23.58 ID:O3rxu16z.net]
- >現実問題としては、using type = T は無くても有ってもかまわないんだろうよ
質問者以外の者がどうして根拠なしに決めつけようとするのか疑問だ math.hにM_PIを入れただけで因縁をつけられてしまうというのに
- 165 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 21:42:58.03 ID:O+yJrb2h.net]
- だから質問者に良いかどうか決めてもらえばよいだろって話
質問者が納得さえすればそれで終わりなんだからさ それなのにこの質問者は>>157についてはノーコメントなんだよ
- 166 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 23:10:33.41 ID:O3rxu16z.net]
- 本気で質問しているようにも見えなかったが「できませんか」と訊かれているのだから
まず「出来ません」と回答しないと>>156は納得しないのではないだろうか。 可否がはっきりしない状態で質問通りでない代替案に誘導したらお題改変と罵られても致し方ない
- 167 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 23:22:29.15 ID:O+yJrb2h.net]
- おまえなー、それなー
いいかげんにしろよな お前、俺に>>164で何て言った?
- 168 名前:デフォルトの名無しさん [2016/12/01(木) 23:42:50.11 ID:SwKXepyG.net]
- min(x,y)とmax(x,y)の定義がマクロ版とテンプレート版が混在して悶絶した経験のある人だけが石を投げなさい。
- 169 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 23:46:56.05 ID:rFASmZLg.net]
- マクロ版min,maxは消せるけど
- 170 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 00:39:59.68 ID:pucVjZc7.net]
- 質問です。
ideone.com/R8pyc7 配列と要素数を受け取るクラスにvectorを渡したい時のスマートな方法を教えて下さい。
- 171 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 00:46:20.74 ID:xqmmn7KF.net]
- vectorが変更しないならそれでいいだろうけど
そのコードみたいにpush_backするならhogeクラスには渡したくない 素直に考えるならvectorごと渡すクラスにすべきだが・・・
- 172 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 00:56:10.11 ID:vQsfzK7a.net]
- >>156の
>"hogeの定義の方"をなんとかしてできませんか はできないからあきらめれよ!ってこと?
- 173 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:11:57.66 ID:EkOvBjK1.net]
- >>170
ideone.com/bdR6fU これでいいじゃん constの参照だと参照を握ったままになるから常に反映される
- 174 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:17:41.14 ID:BG6OiKaZ.net]
- 既存のライブラリをそのまま使いたいのでクラスの変更はなしの方向でお願いします
ラムダ式でコピーコンストラクタを呼ぶ方法がいいのかな ideone.com/R8pyc7
- 175 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:46:59.92 ID:bQI5jx4o.net]
- この状況だとvectorを直接からめた時点でスマートじゃなくなるだろ
unique_ptrとか補助に使ってnew[]で確保した領域に値をコピーして渡すのが結局スマート(賢い)
- 176 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:50:25.88 ID:FOrSERG0.net]
- vector用のオーバーロード作ればいいんじゃないのか
- 177 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:59:15.75 ID:EkOvBjK1.net]
- >>174
size()を使ってる点でおかしいよ vectorのインスタンスを無視するつもりか
- 178 名前:デフォルトの名無しさん [2016/12/02(金) 02:33:56.52 ID:kfHVwGjq.net]
- >>177
君は間違っている。 STLでも begin() と end() で範囲指定するだろ。 イテレータがない型にも対応しようと思えば、先頭ポインタとサイズを渡すのが正しい。
- 179 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 02:49:25.45 ID:l8IxU+t8.net]
- クラス変更無しでvector渡したいなら、ラッパを作って
配列と要素数を更新してからメソッド呼ぶようにするしかないんじゃないかな?
- 180 名前:デフォルトの名無しさん [2016/12/02(金) 05:46:11.27 ID:na0ypgqO.net]
- 何が問題でどうしたいのか明確にしてないからこんな風にとっちらかった回答になるんだよな
- 181 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 07:22:37.66 ID:nGP8T2R9.net]
- 質問者本人はこれ以上無いくらいに明確にしたつもり
- 182 名前:デフォルトの名無しさん [2016/12/02(金) 07:57:25.48 ID:na0ypgqO.net]
- >>181
本人? 意図不明なラムダ使った未定義動作のコードで明確にしたつもりって言われてもなあ
- 183 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 08:20:31.67 ID:4/nN0nxx.net]
- 明確でないならスルーしとけばいい
明確でないから自分の都合で改編するとか迷惑なだけ
- 184 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 09:56:01.01 ID:tdlBqAAM.net]
- >>174
連続格納が保証されてるのだから &a[0]を渡せばいいよ
- 185 名前:デフォルトの名無しさん [2016/12/02(金) 10:09:51.51 ID:HWcr/nXn.net]
- そもそもの基本
◎ int* に vector<int> は渡せない 相手が int* でビルトイン[]演算子を使う限り、 vector ではなく生の配列を用意する以外に選択肢はない
- 186 名前:デフォルトの名無しさん [2016/12/02(金) 10:30:03.38 ID:na0ypgqO.net]
- 明確にしたとしても
>>185 みたいに何も解ってない初心者がでしゃばって見当違いな回答する事も多かったな
- 187 名前:デフォルトの名無しさん [2016/12/02(金) 10:53:45.98 ID:HWcr/nXn.net]
- そもそもの基本を指摘されて発狂するようなガイキチが暴れてただけだろ
- 188 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 10:59:49.79 ID:dQ26sSxp.net]
- >>170
ラッパーかヘルパーを用意して、vectorはそっちで処理する。
- 189 名前:デフォルトの名無しさん [2016/12/02(金) 11:04:51.34 ID:na0ypgqO.net]
- >>187
お前は何のためにstd::vector<T>::dataがT*を返すと思ってんの?
- 190 名前:デフォルトの名無しさん [2016/12/02(金) 12:06:38.84 ID:kfHVwGjq.net]
- vector::data()が追加されたのはC++11 からだから古い入門書には載ってない。
だから安易にdata()を使えと回答する人もまた入門者に近しい。
- 191 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:12:12.15 ID:jbEu1BDa.net]
- どうも論理が飛躍しているな
- 192 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:28:12.29 ID:7EcjjmS3.net]
- 質問者はラムダ使ってるんだからdata()使えるでしょ
- 193 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:29:35.07 ID:dQ26sSxp.net]
- >>190
古い入門書を想定しろ、はさすがに言いがかりがひどすぎる。
- 194 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:36:41.22 ID:oWLJBZXg.net]
- AnsiString::data()のパクリか…
- 195 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:38:30.29 ID:oWLJBZXg.net]
- いや、string::data()か
- 196 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:14:03.78 ID:uzv70fAD.net]
- data()はいいけど、vectorにemplace_back()したらsize()も変化するんだが
それが渡したクラスでは反映されないってのが問題だと思ってたんだが勘違い?
- 197 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:59:13.58 ID:7EcjjmS3.net]
- 俺もそう思ってた
もっといえば要素増やすとdata()の場所がかわってアクセス違反になるかもしれなくて困ると言うことかと
- 198 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 15:03:09.14 ID:uzv70fAD.net]
- >>197
あーそれはあるね どんどん要素を増やして行くと再newしてそこに全部要素コピーされなおして 元のアドレスは無効になるってのがあったな だからvectorをメンバに持つのを頑なに拒否する理由がわからない
- 199 名前:デフォルトの名無しさん [2016/12/02(金) 15:13:55.45 ID:kfHVwGjq.net]
- なんだか急にスレのレベルが落ちたのはなぜ?
他の場所で使うためのvectorをメンバ変数にするとか勝手なこと言いだしているし、精神病っぽいんだが。
|

|