16/11/27 00:03:49.04 Hj6igpz/.net
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ:
C++相談室 part127 スレリンク(tech板)
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 スレリンク(tech板)
■長いソースを貼るときはここへ。■
URLリンク(codepad.org)
URLリンク(ideone.com)
[C++ FAQ]
URLリンク(isocpp.org)
URLリンク(www.bohyoh.com) (日本語)
■ 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); }
};
2:デフォルトの名無しさん
16/11/27 00:28:48.17 1WWISKCd.net
2
3:デフォルトの名無しさん
16/11/27 00:53:39.36 oNxTNf5q.net
前スレでSTLなんて使わない信用できないみたいな恐ろしいこと言ってるアホがいたが、そういう人って生配列、生ポ、for、whileで暮らしてるのかな
正気の沙汰ではない
4:デフォルトの名無しさん
16/11/27 00:59:26.69 wer2Kop4.net
C++の規格書に書かれているということはC++の一部なのであってそれを避けるというのはC++の機能の半分を使わないでいるということだ
5:デフォルトの名無しさん
16/11/27 00:59:39.65 wlJLbi6+.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
6:デフォルトの名無しさん
16/11/27 01:08:13.74 42UX/YwI.net
STLが時代遅れとかほざいてたな
モロにスタンダードで常に進化を続けているというのにな
7:デフォルトの名無しさん
16/11/27 01:18:02.64 0maVDSwR.net
>>3, >>6
自社でSTLやboostより素晴らしいのを作っているじゃないか
日本企業のIT技術力は圧倒的世界一で、3流の外国製のライブラリ等は使用に耐えないって企業が多いから
そうなるんだろ
8:デフォルトの名無しさん
16/11/27 01:19:33.70 MAcCGYLn.net
STLは使ったことがないな
標準ライブラリのstd::vectorはよく使う
9:デフォルトの名無しさん
16/11/27 01:43:32.38 wer2Kop4.net
そうだな
10:デフォルトの名無しさん
16/11/27 02:11:39.36 4hBpEO9s.net
実際問題、コンテナクラスに汎用的な性能を求めることが間違ってる。
本当に速度が欲しい場合には選ばん。
11:デフォルトの名無しさん
16/11/27 02:16:56.70 0maVDSwR.net
>>10
本当に速度が欲しい場合はコンテナを自作しているんだろな
12:デフォルトの名無しさん
16/11/27 02:47:34.77 wer2Kop4.net
という奴が実際にvectorに対して明確に優位性のあるコンテナを作れたところを見たことがない
どうせそういった研究に取り組んだこともなく口だけなんだろうな
13:デフォルトの名無しさん
16/11/27 03:11:56.31 Hj6igpz/.net
STLはこれ以上速くなりようがないくらいに簡素な作りだと思いこんでいる私には、STLを上回る速度のコンテナ書く自信は全くないな。
私は圧倒的にスキルが不足しているから、要素をコピースワップするコストはついついshared_ptr使って対処してしまう。コンテナを自作できない無能な自分が嫌になるよ。
14:デフォルトの名無しさん
16/11/27 03:21:22.71 411Nbo29.net
使い方次第じゃないかなぁ
極端な話、vectorで毎回先頭に挿入するような使い方してたら遅くなるよね
どういうのか把握して適切なコンテナ選べるならわざわざ自作する必要はないかと
15:デフォルトの名無しさん
16/11/27 03:30:23.93 Hj6igpz/.net
私の場合、ついつい std::vector<T> ではなく、std::vector<shared_ptr<T>> を使って済ませてしまうので、いつまでたってもコンテナを自作するスキルが上がらないよ。
「ぼくのかんがえたさいきょうのこんてな」を自作する精神力がまだまだ足りないようだ。反省。
16:デフォルトの名無しさん
16/11/27 03:33:36.54 wer2Kop4.net
C++はコンテナの種類だけなら無駄に多いからな
17:デフォルトの名無しさん
16/11/27 06:48:20.63 pUctI5IC.net
dequeとvectorは片方あればいいとかか
18:デフォルトの名無しさん
16/11/27 09:24:27.84 SqUFXM7z.net
>>11
vectorはただのガワなんだから、速度が必要ならallocatorだけ自作すりゃいいだろ
19:デフォルトの名無しさん
16/11/27 09:29:56.70 WW/pNH6a.net
連続性が保証できないから。
20:デフォルトの名無しさん
16/11/27 09:53:11.77 Hj6igpz/.net
任天堂の倒し方知ってる系の人なら、当然のようにSTLを否定するだろう。
私は任天堂の倒し方知らないので、こういう人たちを心の底から尊敬する。
21:デフォルトの名無しさん
16/11/27 10:42:14.10 P/uIEXU4.net
>>20
なぜそこまでSTLを否定したいのかよこ分からないなあ。
多くのケースで多くの人が使うのに必要十分な程度の機能、性能は持ってる訳だし、標準ライブラリとしては妥当な仕様かと思う。
これで不足な場合だけ自作のコンテナなりを考えればいいだけでしょ。
22:デフォルトの名無しさん
16/11/27 10:58:23.07 Uyh6ikI3.net
>>8
何をいってるのか、意味不
23:デフォルトの名無しさん
16/11/27 11:06:06.35 l9GcbBcF.net
いつものあれだろ?
「標準仕様書中の表現として、STLあるいはstandard template libraryなどという言葉は一回も使用されていない」
って言う。
厳格にこの言いつけを守ってる人がいるんだよ…
24:デフォルトの名無しさん
16/11/27 11:26:05.74 Hj6igpz/.net
「STLのコンテナでは力不足」と言い切る優れたプログラマになりたいのだが、私はちっともそのレベルに到達できない。orz
25:デフォルトの名無しさん
16/11/27 11:37:32.43 zdOfPVrj.net
婆ちゃんがイオンのことを今でもジャスコというのを聞くとちょっとイラッとする
STLという単語をみると同じような気持ちになるが
老人に新しいことを覚えさせるのが難しいと知っている俺は
そしらぬ顔で静観することにしている
26:デフォルトの名無しさん
16/11/27 11:39:37.56 wer2Kop4.net
>>19
また古代からタイムスリップしてきた人ですか?
27:デフォルトの名無しさん
16/11/27 11:44:52.34 qE9zLQzg.net
>>24
それ、優れたプログラマじゃない可能性がたっぷりある。
28:デフォルトの名無しさん
16/11/27 11:48:02.44 MAcCGYLn.net
標準ライブラリは速くなる余地が無いわけではないな。
テンプレート特殊化を書いてやらないと解決出来ないときもある。
Visual C++の標準ライブラリが最近見直したら一部の処理が何十倍も速くなったと言っているくらいだ
29:デフォルトの名無しさん
16/11/27 11:56:08.91 wer2Kop4.net
そりゃ実装依存のところは多い
規格書に事細かに記されているわけではない
しかしそれはコンテナのような昔からあって仕様がシンプルなクラスのことでは無いだろう
30:デフォルトの名無しさん
16/11/27 12:10:55.75 Hj6igpz/.net
以下の文書によると、basic_string のパフォーマンスが改善され、std::vectorをオーバーホールとか。
マイクロソフトの連中は、このスレでSTLを否定する優秀な人のような英断ができず、いまだにSTLの保守をやってる。
このスレでSTLを否定する優秀な人を一本釣りしてマイクロソフトにスカウトすればいいのに、マイクロソフトは見る目がないな。
What's New for Visual C++ in Visual Studio 2017 RC
URLリンク(docs.microsoft.com)
31:デフォルトの名無しさん
16/11/27 12:12:18.35 MAcCGYLn.net
>>29
>規格書に事細かに記されているわけではない
突然関係ないことを言い出してどうした?
コンテナー自作する必要が有ったと主張する人に対してその必要性が全く理解できないという人がいたので
可能性はを示唆しただけだが。
32:デフォルトの名無しさん
16/11/27 12:14:02.11 LAFeCFqG.net
algorithm系は使うもの使わないものがはっきりわかれない?
33:デフォルトの名無しさん
16/11/27 12:17:16.89 Hj6igpz/.net
このスレは何人も天才プログラマが書き込んでるんだな。
STLで十分と思ってしまうレベルの低い私は、己の無能さで嫌悪感に陥りそうだ。
34:デフォルトの名無しさん
16/11/27 12:17:28.71 wer2Kop4.net
>>30
C++のベンダーをやっている以上保守は義務だろ
MS独自のMFCはあまりにもゴミだが
CMapを使おうと思ったらあまりにも低機能すぎてキーボード破壊しそうになった
35:デフォルトの名無しさん
16/11/27 12:28:42.78 plVb52Pg.net
>>32
adjacent_differenceの悪口はよせ
36:デフォルトの名無しさん
16/11/27 12:41:27.00 Hj6igpz/.net
怠惰で無能な私は、bool で存在有無だけを返すストイックな binary_search() を使いこなせない。
ついつい、upper_bound()やlower_bound() を使ってしまう。
STLで事足りると思ってしまう自己暗示からどうしても抜け出せない。
このスレの天才プログラマーのようにSTLを捨てて「ぼくのかんがえたさいきょうのこんてな」に行くべきなのだが。
37:デフォルトの名無しさん
16/11/27 13:18:21.08 +eKpaGRF.net
STLはあくまで汎用的で問題が起こりにくい作りになっているから
プログラムの用途に合った特殊なコンテナってことなら
自作する意味はあるかもしれない
例えば要素を削除するときに前詰めしないコンテナ、とか
そのコンテナには、どこが「空き」になっているか、別途把握できるしくみが
必要だけど、それはそういう風に実装すればよいだけだし
要は、連続的なメモリに確保されるけど、歯抜けになることが許されるコンテナ
ただしそんなに速くならないだろうね
38:デフォルトの名無しさん
16/11/27 13:55:49.85 eIL19TgX.net
>>1は無能
自分で書いておきながらワッチョイ付けられないわ
ウンコード貼り付けるわ
39:デフォルトの名無しさん
16/11/27 14:11:24.54 LAFeCFqG.net
>>36
むしろequal_rangeしか使わない
40:デフォルトの名無しさん
16/11/27 14:12:23.15 Hj6igpz/.net
>>38
全くその通り。無能。恥を知れって感じ。
41:デフォルトの名無しさん
16/11/27 14:50:05.59 w634zOe4.net
今時STLはないだろ
42:デフォルトの名無しさん
16/11/27 15:08:20.29 P/uIEXU4.net
>>33
STLで十分と思うことは、別にレベルが低いとはならない。
STLで十分と思うことがレベルが低いというのは、レベルが低いと思う。
自分を卑下する書き込みをしつつ、高尚なこと考えている俺カッケーと酔いしれてないか?
43:デフォルトの名無しさん
16/11/27 15:26:29.03 BLqqs723.net
それは己ちゃうんかいw
44:デフォルトの名無しさん
16/11/27 15:55:56.37 3Qbc/l9n.net
>>42
ド素人の背伸びなんだからほっといてやれよw
下手につつくと居付いちゃうぞ
45:デフォルトの名無しさん
16/11/27 15:56:46.93 SqUFXM7z.net
>>37
それってlistじゃないの?
46:デフォルトの名無しさん
16/11/27 15:57:37.51 SqUFXM7z.net
>>45
失礼連続前提ね
47:デフォルトの名無しさん
16/11/27 16:32:55.67 42UX/YwI.net
理解出来ないと時代遅れと言って反応を見ているんだろうが端から見ていて痛々しい限りだ
48:デフォルトの名無しさん
16/11/27 16:49:01.91 2ZVZJ+KM.net
STLが理解できない?
お前さんだけじゃねw+
49:デフォルトの名無しさん
16/11/27 17:08:21.71 LAFeCFqG.net
コンテナ、イテレータ、アルゴリズムの組合せ、という根っこにある考え方でまあ上手く行ってたんだけど、
今となってはちょっと古びた感じはするね。
<algorithm>のごちゃついた様を見るとそういうふうに思う。
50:デフォルトの名無しさん
16/11/27 18:02:33.78 Hj6igpz/.net
>>42 のような面白い返答があったのでそろそろ真意を正直に書くと、
コンテナ自作派に憧れるていを取りつつコンテナ自作派をバカにしてただけだ。
「任天堂の倒し方知ってる」とか「ぼくのかんがえたさいきょうのこんてな」とか例えてる時点で
コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってたのだが、
本当にコンテナ自作派に憧れているとストレートに解釈した人が出てきて楽しかったわ。
>>37
「空き」の定義は開発者が決めなければならない。
コンテナに突っ込むクラスに「空き」フラグを扱うメンバ変数を追加すればSTLコンテナ利用で解決することを
わざわざ車輪の再発明でコンテナまで自作する人をおだててバカにするのは実に楽しい。
51:デフォルトの名無しさん
16/11/27 18:11:22.15 MAcCGYLn.net
>コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってた
これは思った。気付かない奴はアスペ
52:デフォルトの名無しさん
16/11/27 19:37:37.43 YEwu7XTV.net
俺も諄いなーと思いつつ黙って見てたけど、ストーレートに解釈してるやつが居るのみてビックリしたのと同時に、こんなに純真な心で2chやってて大丈夫なのかと心配になったわ。
あと、だからこのスレよく荒れてるんだなぁと納得した。
53:デフォルトの名無しさん
16/11/27 19:49:28.80 4JtqQJ1X.net
ゲームとかなら、汎用性よりスピード命や小メモリとかで俺会社のSTLを作ってそうなきがするが
ゲーム制作会社とかではしているところはないのかな
>>1 はなんでshared_ptrのFILE deleterを張っているんだ
C++ならFILEじゃなくfstreamだろって気がするが
54:デフォルトの名無しさん
16/11/27 20:14:35.31 Hj6igpz/.net
>>53
あまりにも ID:Hj6igpz/ が無能すぎて fstream を使いこなせないからだよ。みなまで言わせんな恥ずかしい。
アホな ID:Hj6igpz/ は>>1 のラッパークラス FILE_Ptr を使って以下のように稚拙なコードを書く傾向がある。
こんなことやってるからいつまでたっても ostream系を使いこなすスキルが育たない。ID:Hj6igpz/ は C++プログラマに向いてないよ。
{
FILE_Ptr fp = fopen("foo.log", "w");
if (fp != NULL) {
fprintf(fp, "1hello world\n");
fputs("2howdy world\n", fp);
fwrite("3hello world\n", 13, 1, fp);
}
}
55:デフォルトの名無しさん
16/11/27 20:42:29.48 pUctI5IC.net
fstreamはfstreamで20余年の付き合いを経てもいまだにイミフなとこあるし
56:デフォルトの名無しさん
16/11/27 20:47:34.07 P/uIEXU4.net
>>50
お前さんの真意とやらはどうでもいいから、面倒くさいことせずに、初めからもっと直接的に意味のある議論をしてほしい。
ここまでの流れで唯一ためになったのは、>>52のレスにあった「諄い」という漢字を知ったということだけだ。
57:デフォルトの名無しさん
16/11/27 20:49:47.24 P/uIEXU4.net
>>53
ゲーム会社のことはよく知らないけど、そういうのはアロケータの自作でもしてるのかな。
58:デフォルトの名無しさん
16/11/27 21:04:15.44 zEm283RN.net
ゲームエンジン・アーキテクチャによると
コンテナを自作するのは普通らしい
59:デフォルトの名無しさん
16/11/27 21:13:33.19 kJvliJ+f.net
>>54
それ以前に、FILE"Deleleter"ってわざとしているのか
それともdeleteのスペル知らないのか
deleteはC++のキーワードだよな
operator FILE* () はcons抜けだし
60:デフォルトの名無しさん
16/11/27 21:46:20.25 Hj6igpz/.net
>>59
何しろ無能だからこんなもんだろう。生温かく見守ってやれ。
61:デフォルトの名無しさん
16/11/27 21:54:20.66 IYfuOepr.net
>>53
有名なのだとEASTLでオープンソース化されてる
URLリンク(i-saint.hatenablog.com)
URLリンク(github.com)
62:デフォルトの名無しさん
16/11/27 21:59:03.95 WW/pNH6a.net
ベンチ取ってみたらどうか。
僕の古典的PCしかもノートでも驚くほど速い。
意外と問題にならない程度の速度を持っているのではないか。
63:デフォルトの名無しさん
16/11/27 22:00:05.48 Hj6igpz/.net
>>59
勉強する良い機会になった。ありがとう。
URLリンク(ja.wikipedia.org)
64:デフォルトの名無しさん
16/11/28 00:27:42.27 nFYh94sG.net
type erasureのためだけにshared_ptrを持ち出さなければならないクソ言語
65:デフォルトの名無しさん
16/11/28 13:41:28.68 VFe8unWC.net
SSEのイントリンシック使うとき16バイト境界にアライン必須なんで
stlに入れるとき用にアロケータだけ自作したことはあるな(コンテナの型自体変わってしまうので不便だけど
EASTLは知らんかった、家帰ったら使ってみよう
66:デフォルトの名無しさん
16/11/28 17:31:28.84 w/GpYaDf.net
>>61
docディレクトリの文書でEAの中の人がSTLについて熱く語っているのが好感を持てた。
67:デフォルトの名無しさん
16/11/28 21:08:56.39 w/GpYaDf.net
EASTL にベンチマークプログラム があったのでWindows10(x86)の Visual Studio 2017 RC でビルド&実行してみた。
以下は、そのベンチマークプログラム EASTLBenchmarks.exeの標準出力結果
****************************************************************************************
EASTL Benchmark test results
****************************************************************************************
EASTL version: 3.04.00
Platform: Windows on X86
Compiler: Microsoft Visual C++ compiler, version 1910
Allocator: PPMalloc::GeneralAllocator. Thread safety enabled.
Build: Full optimization. Inlining enabled.
Values are ticks and time to complete tests; smaller values are better.
Test VC++ Dinkumware EASTL Ratio Difference?
---------------------------------------------------------------------------------------------------------------------
algorithm/adj_find/vector<TestObject> | 699814 699.8 us | 913513 913.5 us | 0.77 -
algorithm/copy/vector<LargePOD> | 270367 270.4 us | 269001 269.0 us | 1.01
algorithm/copy/vector<uint32_t> | 8193 8.2 us | 5462 5.5 us | 1.50 +
algorithm/copy_backward/vector<LargePOD> | 280267 280.3 us | 274463 274.5 us | 1.02
algorithm/copy_backward/vector<uint32_t> | 3072 3.1 us | 3414 3.4 us | 0.90
algorithm/count/vector<uint64_t> | 270367 270.4 us | 266271 266.3 us | 1.02
algorithm/equal_range/vector<uint64_t> | 10268141 10.3 ms | 22004184 22.0 ms | 0.47 -
68:デフォルトの名無しさん
16/11/28 21:12:50.29 w/GpYaDf.net
>>67 の続き。途中省略で末尾だけ記載する。
vector<AutoRefCount>/erase | 2132212 2.1 ms | 2128798 2.1 ms | 1.00
vector<MovableType>/erase | 124073512 124.1 ms | 121713608 121.7 ms | 1.02
vector<MovableType>/reallocate | 2317236 2.3 ms | 2053355 2.1 ms | 1.13
vector<uint64>/erase | 11193260 11.2 ms | 11209646 11.2 ms | 1.00
vector<uint64>/insert | 9193159 9.2 ms | 9221835 9.2 ms | 1.00
vector<uint64>/iteration | 68957 69.0 us | 68957 69.0 us | 1.00
vector<uint64>/operator[] | 106166 106.2 us | 86368 86.4 us | 1.23
vector<uint64>/push_back | 2452078 2.5 ms | 1394507 1.4 ms | 1.76 +
vector<uint64>/sort | 8286133 8.3 ms | 7735840 7.7 ms | 1.07
sum | 871753892 871.8 ms | 768601049 768.6 ms | 1.13
****************************************************************************************
Time to complete all tests: 3.66 s.
RETURNCODE=0
69:デフォルトの名無しさん
16/11/28 21:22:19.20 w/GpYaDf.net
>>68の続き。
188個あったテスト項目のうち、71個がEASTL有利、10個がSTL有利、107個が互角という結果になった。
以下に、参考までにEASTL有利だった項目を良い成績順にベスト10を記す。
algorithm/find_end/string/end | 600816 600.8 us | 25945 25.9 us | 23.16 +
deque<ValuePair>/push_back | 5864095 5.9 ms | 880058 880.1 us | 6.66 +
deque<ValuePair>/push_front | 6016006 6.0 ms | 1031627 1.0 ms | 5.83 +
deque<ValuePair>/operator[] | 4007712 4.0 ms | 693327 693.3 us | 5.78 +
hash_map<uint32_t, TestObject>/count | 264563 264.6 us | 56326 56.3 us | 4.70 +
deque<ValuePair>/find | 1577482 1.6 ms | 381996 382.0 us | 4.13 +
algorithm/find_end/string/middle | 579650 579.6 us | 148497 148.5 us | 3.90 +
string<char8_t>/operator[] | 133476 133.5 us | 34820 34.8 us | 3.83 +
string<char16_t>/operator[] | 133477 133.5 us | 35844 35.8 us | 3.72 +
algorithm/lex_cmp/schar[] | 137914 137.9 us | 39941 39.9 us | 3.45 +
70:デフォルトの名無しさん
16/11/28 21:47:38.32 w/GpYaDf.net
>>69の続き。上述のランキングをさらに11位から25位まで追記しておく。
algorithm/search/string<char> | 934678 934.7 us | 285728 285.7 us | 3.27 +
algorithm/rotate/vector<TestObject large> | 161470 161.5 us | 58716 58.7 us | 2.75 +
hash_map<uint32_t, TestObject>/operator[] | 343762 343.8 us | 129722 129.7 us | 2.65 +
hash_map<uint32_t, TestObject>/find | 177172 177.2 us | 67250 67.3 us | 2.63 +
map<TestObject, uint32_t>/clear | 90805 90.8 us | 35162 35.2 us | 2.58 +
string<char16_t>/swap | 78515 78.5 us | 30723 30.7 us | 2.56 +
bitset<1500>/count | 14115750 14.1 ms | 6574833 6.6 ms | 2.15 +
hash_map<string, uint32_t>/count | 946967 947.0 us | 443784 443.8 us | 2.13 +
deque<ValuePair>/insert | 28192924 28.2 ms | 13517665 13.5 ms | 2.09 +
bitset<75>/count | 1468243 1.5 ms | 700838 700.8 us | 2.09 +
string<char16_t>/insert/pos,p | 1060986 1.1 ms | 513424 513.4 us | 2.07 +
hash_map<string, uint32_t>/find_as/char* | 947992 948.0 us | 461194 461.2 us | 2.06 +
string<char16_t>/find/p,pos,n | 66859496 66.9 ms | 33442208 33.4 ms | 2.00 +
bitset<75>/flip | 400772 400.8 us | 200727 200.7 us | 2.00 +
set<uint32_t>/count | 1733147 1.7 ms | 870841 870.8 us | 1.99 +
71:デフォルトの名無しさん
16/11/28 22:16:01.54 aUTLhSnb.net
キモッ
72:デフォルトの名無しさん
16/11/28 22:29:08.06 nxkexmqL.net
EASTLにコンテナの範囲外アクセスチェックとかのデバッグ機能ってある?
自分でもやってみるけど知ってる人いたら教えて欲しい
73:デフォルトの名無しさん
16/11/29 03:57:58.52 JKfAWAo3.net
C++派八策
1.C++で書けばパフォーマンスが良くなる。なぜならパフォーマンスが良くなるまでC++書くからだ。
これを頭に叩き込め。
2.常にC++で書いておればそのうち他の要因でパフォーマンスが良くなるときが来る。
そのときに思い切りC++の手柄を主張しろ。
3.いいことはC++の手柄、悪いことは他の要因のせいにしろ。
4.データは都合のいいところだけ使え。グラフは切貼りしろ。
5.タイムラグを上手く使え。
6.「これがC++だ」と明言するな。定義を問われたら「C++の本を読め」と言っておけ。
7.批判されたら「お前はC++を理解してない」と言え。
8.いざとなったら定義を変えろ。オブジェクト指向に固執するな。
74:デフォルトの名無しさん
16/11/29 06:49:46.04 nF3eDud1.net
boost spiritって
LL(∞)パーサー生成すんの?
PEGパーサー生成するの?
LL法とPEG法wikipedia両方の実装例にこの名前のってあるんだけど
それとも両方とも実装してるの?
75:デフォルトの名無しさん
16/11/29 10:54:07.14 FnERKnae.net
菅官房長官「ちょっと何言ってるかわかんない」
76:デフォルトの名無しさん
16/11/29 13:08:19.85 nF3eDud1.net
4行目の「法」と「w」の間に格助詞の「の」が入る予定でした
77:デフォルトの名無しさん
16/11/29 13:44:34.04 CM7LOPnj.net
プログラム的にいうと
LLは実装で使うアルゴリズムのひとつ
PEGは仕様を定義する表現(言語)のひとつ
で対立・排他関係にあるわけではない
boost.spiritはPEG形式で与えられたルールから構文解析器を作成するライブラリ
(作成された解析器はLL法で入力を解析する)
78:デフォルトの名無しさん
16/11/29 18:41:17.09 nF3eDud1.net
>>77
ど素人の私にわざわざ回答をくださってありがとうございます。
これからも勉強に励みます
79:デフォルトの名無しさん
16/11/29 18:46:41.16 GF2v+9TM.net
boost spiritってEBNFじゃなくてPEGだったんだな
使わんからどうでもいいが
80:デフォルトの名無しさん
16/11/29 20:31:51.74 baTvYruL.net
いま趣味で囲碁ソフト作ってるんだけど
Cなんすよ。
いろいろ面倒なんでC++で
作りなおそうかと思案中です。
作成の労力は何割ぐらい
軽減するでしょうか?
81:デフォルトの名無しさん
16/11/29 20:47:31.45 DmRk6e1B.net
増す
82:デフォルトの名無しさん
16/11/29 20:55:01.08 1SK7brxW.net
その質問に答えられる人は誰一人としていないが
少なくともCより面倒になることは(熟練したC++プログラマなら)ありえないから
チャレンジしてみる価値はある
ただし、()の中が重要で、熟練したプログラマなら、という話
君がすごく筋がよいならC++はきっと役に立つはず
一方で筋が悪いというのはC++においては余計なことをやろうとすること
余計なことさえしなければ、Cより面倒になることはあり得ないし
逆に心に邪念があれば、Cとは別の意味で面倒な樹海に迷い込む
C++は書く人の心の中を映す鏡
83:デフォルトの名無しさん
16/11/29 21:09:35.06 glNciwx+.net
Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、
JS(ES5), Flash, PHP, C++, Java, C#, Python に書き出せる。
Windows8.1対応。IDEは、FlashDevelop
このサイトで、ブラウザでプログラミングして、実行できる
Try Haxe !
try.haxe.org/
Haxeプログラミング入門、尾野政樹、2015
84:デフォルトの名無しさん
16/11/29 21:16:52.64 bPmZgvzu.net
>>83
このコピペ時々見るけどヘイトHaxeの効果抜群だな
85:デフォルトの名無しさん
16/11/29 21:19:45.31 X8I97SOu.net
>>80
レートどんくらい?
いちおープラスなんか?
86:デフォルトの名無しさん
16/11/29 21:24:49.77 Ofu9bBqm.net
>>84
せやな。Mindに手を出すわ
87:デフォルトの名無しさん
16/11/29 21:42:26.41 8ZPVrbbC.net
>>80
お前の能力によるとしか言えないんじゃないのか
ソースコードの量が多いと今のCをC++へ作り直す工程はかなりの労力だろな
88:デフォルトの名無しさん
16/11/29 21:44:01.60 ua9E/pwR.net
いや、>>80は絶対にC++で書き直すべきだ!!
89:デフォルトの名無しさん
16/11/30 06:56:30.70 UPCsGfLr.net
C++を「Cにvectorとかstringなんかの便利な型を追加した言語」と
割り切って使うなら手間は増えないんじゃないかな。
でも実際にC++で書き始めると、C++らしい書き方をしないと
恥ずかしいみたいな気持ちになって深みにはまることが多い。
90:デフォルトの名無しさん
16/11/30 07:12:30.65 HOaAIIiu.net
>>80がgithubにソースを晒せば解決
91:デフォルトの名無しさん
16/11/30 07:35:10.92 60EZvxwk.net
三割くらい減る
92:デフォルトの名無しさん
16/11/30 08:50:24.62 AmbpRVJT.net
Cでいったん書いたんなら、そのときの反省点が色々あるだろ
それを踏まえてより上手くまとめるにはC++はいいツールだぜ
93:デフォルトの名無しさん
16/11/30 09:01:18.76 WcEJDmm/.net
ぼくのかんがえるC++にしかできない超強力3大機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・ラムダ。
94:デフォルトの名無しさん
16/11/30 09:03:12.26 WcEJDmm/.net
下の根の乾かないうちに訂正。
ぼくのかんがえるC++にしかできない超強力3大(5大?)機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・templateとlambda。
95:デフォルトの名無しさん
16/11/30 09:05:34.45 WcEJDmm/.net
exceptionとRTTIはよく使うけど次点。
異論反論はもちろん認める。
96:デフォルトの名無しさん
16/11/30 09:15:29.34 60EZvxwk.net
RTTIは使わないな
使うなって偉い人が言ってるし
97:デフォルトの名無しさん
16/11/30 09:19:23.91 mG9+BxSG.net
なんで?(殺意)
98:デフォルトの名無しさん
16/11/30 10:01:29.94 2V+M5QrA.net
RAIIの間違いじゃね?
RTTIをよく使うって違和感ある。
99:デフォルトの名無しさん
16/11/30 10:25:44.68 TMG+JuRV.net
話題になっていた
STLと標準ライブラリと違うもの?
100:デフォルトの名無しさん
16/11/30 11:41:28.64 AmbpRVJT.net
typeidをデバッグや実験でなく実用で使ったことが確かにないなあ
C++例外は嫌々しぶしぶ使ってるけど、クソすぎてため息
101:デフォルトの名無しさん
16/11/30 12:37:13.96 60EZvxwk.net
例外ってなんか悪い部分あるの?
102:デフォルトの名無しさん
16/11/30 12:51:41.03 zOzS6ENl.net
???部にどの様な記述でコンパイルできるのですか?
#include <iostream>
#include <vector>
template<class T>
class Point{
public:
Point(T x,T y):m_x(x),m_y(y){}
private:
T m_x;
T m_y;
};
int main( int argc, char *argv[] )
{
Point<int> p1(0,0);
Point<double> p2(0.0,0.0);
std::vector<Point<???>> vpoints;
vpoints.push_back(p1);
vpoints.push_back(p2);
return 0;
}
103:デフォルトの名無しさん
16/11/30 13:02:54.90 7bek9hnS.net
エラーメッセージは?
104:デフォルトの名無しさん
16/11/30 13:08:22.75 0DxS4g7L.net
親クラス用意しなきゃ無理じゃね?
105:デフォルトの名無しさん
16/11/30 13:16:41.10 7bek9hnS.net
あ、今意味がわかった
それやるならunion用意するかな
そもそも同じvectorにする意味がわからないけど・・・
106:デフォルトの名無しさん
16/11/30 13:21:49.66 TMG+JuRV.net
>>105
プログラム的に意味があるかどうかなんか問題ではないだろ
それ言い出したら、
push_backした後なにもせずにプログラムが終了しているんだから
push_backする必要ないだろ
107:デフォルトの名無しさん
16/11/30 13:47:54.21 kcnEUqeY.net
>>102
そこをどの様に記述してもコンパイルはできない
そのPoint<int>とPoint<double>はそれぞれなんの関係もない独立した型であって
相互に変換や代入などはできないから
108:デフォルトの名無しさん
16/11/30 14:23:43.41 X0PK+rS4.net
>>99
STLは前世紀にどこかのメーカーが作ったライブラリ
便利なので広まって標準ライブラリの礎となった
最新のバージョンは3.3で今でもダウンロードできる
対応する環境はMS C++ Ver.5とかgcc 2.9とかだと思う
109:デフォルトの名無しさん
16/11/30 14:26:14.29 TMG+JuRV.net
標準ライブラリっていってもパクリってこと?
110:デフォルトの名無しさん
16/11/30 15:43:30.08 tnQQtKaj.net
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違ったSTLとか嫌だろ
111:デフォルトの名無しさん
16/11/30 16:25:16.47 34Y1lEhk.net
C++例外は、明らかにJavaやC#のそれに比べて親切度において劣る。
どこからジャンプしてきたかの呼び出し履歴をとれないのはあまりに大きい。
112:デフォルトの名無しさん
16/11/30 16:53:47.96 34Y1lEhk.net
EASTLを Visual Studio 2017 RC で使って感じたこと。
・なるほど少し速いかも、なレベル。悪くない。むしろ良い。
・仕事ではなく趣味や学習目的で扱う分には、手本としてもオススメできる。
・既存のstdとeastlを混在利用することは可能だが要注意。
・EASTLに限らずテンプレートの宿命だが、プログラマ側ソースコードのどの箇所がエラー原因なのか場所を特定しずらい。
具体的に困ったこと。いずれも対策を講じて解決済み。
・eastlで作ったコンテナをうっかり std::random_shuffle() にいれると、どのライブラリの swap() を呼ぶかコンパイラがわからずエラーになる。
eastl::shuffle()に置き換えて、第三引数の乱数生成器は stdの<random>の乱数生成器を使って対処した。
・eastl::make_shared<>(args...) で Gdiplus::Bitmapの梟雄ポインタのインスタンスを作ろうとすると 引数2つ渡すGdiplus::GdiplusBaseのnew演算子が定義されてないとかで、エラーになる。
従来通り、new Gdiplus::Bitmap(...) で作ったものを渡して対処した。
113:デフォルトの名無しさん
16/11/30 17:29:43.03 AmbpRVJT.net
noexceptがデフォじゃないのが許せん
114:デフォルトの名無しさん
16/11/30 19:00:58.85 j7/lwSC0.net
>>109
標準化ってのは独自性の有る新たなものを産み出すんやなくて
世に存在する既存のものの統一を図るのが本来やで
115:デフォルトの名無しさん
16/11/30 19:08:39.22 TMG+JuRV.net
>>110
コンパイラごとにSTLの実装は違いますけど?
VC++、gcc、clang、C++builderで実装が同じだと思ってました?w
~~~~~
116:デフォルトの名無しさん
16/11/30 19:33:15.69 tnQQtKaj.net
誰が実装が同じだといった?
規格の話しているのに、なんで実装の話が出てくるのか謎なんだが
117:デフォルトの名無しさん
16/11/30 19:46:20.54 TMG+JuRV.net
>>116
おまえ頭おかしいのか?
己が書いたものを100回復唱してみろよ
↓
> 誰が実装が同じだといった?
> 規格の話しているのに、なんで実装の話が出てくるのか謎なんだが
118:デフォルトの名無しさん
16/11/30 19:54:56.69 34Y1lEhk.net
規格がまずあり、開発環境がそれをちゃんと守ってるかどうかは実装を見て確かめる。
規格の話だけするのなら、そもそもコンパイラや実行環境さえ必要なくて、日本の自称・憲法学者(笑)のように紙とペンだけで済む。
規格と実装、両方の話をするのが正しい。
119:デフォルトの名無しさん
16/11/30 20:16:34.70 SxJugRcT.net
規格の話しているのに、なんで実装の話が出てくるのか謎なんだが?
120:デフォルトの名無しさん
16/11/30 20:22:51.93 wWCievJu.net
実装はコンパイラ毎に違うに決まってんだろ
121:デフォルトの名無しさん
16/11/30 20:43:04.57 TMG+JuRV.net
>>110
を読んでみろ
122:デフォルトの名無しさん
16/11/30 20:50:12.38 o1dhiyLy.net
.
.
■■人間性に批判殺到 あの悪質パクツイ垢 @copy__writing の管理人は東京都三鷹市の莉里子■■
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
■今までのプライベート垢
@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko
・
・
@riricatputi (新アカ) URLリンク(imgur.com)
100垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)
123:デフォルトの名無しさん
16/11/30 21:00:50.51 SxJugRcT.net
質問とか罵倒とか~を読めとかじゃなくて自分の主張をすれば一発で終わることを
124:デフォルトの名無しさん
16/11/30 21:13:12.45 34Y1lEhk.net
実装の定義がマチマチ。
ある人はプロプロセッサ処理前のソースコードという意味で。
ある人はプロプロセッサ処理後のソースコードという意味で。
ある人はコンパイル後のobjバイナリという意味で。
ある人はビルド後の実行バイナリという意味で。
125:デフォルトの名無しさん
16/11/30 21:39:54.28 tnQQtKaj.net
ID:TMG+JuRV がなぜ発狂しているのか謎なんだが
---
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違った(規格の)STL(モドキ)とか嫌だろ
---
126:デフォルトの名無しさん
16/11/30 21:56:08.67 pYpq7m+B.net
一番頭おかしいやつが降臨しました>>124
127:デフォルトの名無しさん
16/11/30 22:24:40.10 1zLD/kv4.net
パクリとかw
開発者本人が標準化委員会に提案したんだぞ
128:デフォルトの名無しさん
16/11/30 23:42:37.82 lwghcYzA.net
ID:TMG+JuRV がなぜ発狂しているのか一瞬分からなかったが>>108-110を読み直して理解した
>>110の説明の日本語がよろしくない
129:デフォルトの名無しさん
16/12/01 00:10:57.08 SwKXepyG.net
PCRE という正規表現ライブラリが存在する。
これをSTLのregexと同じインターフェースでラップした場合、STLと呼べるだろうか?
130:デフォルトの名無しさん
16/12/01 00:14:57.78 rFASmZLg.net
regexはSTLなのか
threadをSTLと言ってる人も見かけたし何でもありだな
131:デフォルトの名無しさん
16/12/01 00:18:17.94 O3rxu16z.net
つまり
STLという言葉を使う奴=バカ
ハゲもその一人
132:デフォルトの名無しさん
16/12/01 00:23:12.22 SwKXepyG.net
>>130
指摘ありがとう。
regex はあくまでstdに採用されたのであってSTLではなかった。訂正します。
133:デフォルトの名無しさん
16/12/01 00:27:51.92 9RDsFVMO.net
stdは「スタド」と発音すべき
134:デフォルトの名無しさん
16/12/01 00:37:39.97 SwKXepyG.net
studio をスタジオと呼ぶ日本語の舌なのに、あろうことか stdio をスタディオと呼んでしまう。
135:デフォルトの名無しさん
16/12/01 01:01:51.34 lTTMQ5z2.net
>>113
ある程度のサイズのプログラムで大半を占めるアプリケーション層の操作が noexcept になる
なんてことは考えにくいので、 noexcept がデフォだったらそれはそれで許せない感じになる。
noexcept がデフォでうれしいのなんてライブラリ作者ぐらいでしょ。
136:デフォルトの名無しさん
16/12/01 01:37:48.41 TTb4zObN.net
>>130
regexもスタンダードなテンプレートライブラリだろ
137:デフォルトの名無しさん
16/12/01 02:09:31.61 SwKXepyG.net
たとえ話。
STLを会社とすると、basic_stringはSTLの特別顧客だがSTLの社員ではない。
STLを会社とすると、regex、thread、iostreamは一般客。
regexを会社とすると、basic_stringはregexの特別顧客だが、regexの社員ではない。
stringstreamを会社とすると、basic_stringはstringstreamの契約社員。
basic_stringだけが特別な存在として異彩を放っている。
138:デフォルトの名無しさん
16/12/01 02:52:13.09 PTAZcCnS.net
下手な例え話はやめろとあれほど言ったじゃないか
139:デフォルトの名無しさん
16/12/01 03:20:50.25 n8BYNyNm.net
>>128
確かに>>110の内容は誤解する余地のある書き方だけど普通に読めば理解できるし、>>115は良く読まずに脊髄反射してるか、分かってて揚げ足取りしてるのか、いずれにせよ建設的な議論ができないタイプなんだろう。
140:デフォルトの名無しさん
16/12/01 06:56:46.70 SwKXepyG.net
>>138
いらだつ気持ちはわかるよ。
basic_stringはヴェルタースオリジナルと同じくらい特別な存在だからね。
URLリンク(www.youtube.com)
141:デフォルトの名無しさん
16/12/01 08:11:31.70 7obV0jvg.net
STLが会社ならstringはハケン
「ボク、正規になれるって頑張ってきたのに…」
142:デフォルトの名無しさん
16/12/01 10:05:27.69 PTAZcCnS.net
>>139
ほう?
この例え話から建設的な議論を広げて貰おうか?
143:デフォルトの名無しさん
16/12/01 12:54:22.29 rYSe/HxL.net
>>142
そう言うレスが建設的じゃないって言われてるんだろ
144:デフォルトの名無しさん
16/12/01 13:02:57.96 PTAZcCnS.net
>>143
え?なんで?
出来ないこと要求しちゃったから?
145:デフォルトの名無しさん
16/12/01 14:01:09.15 vPHgqg3S.net
template<typename T> struct moge
{
struct hage{};
};
template<typename T> void hoge(typename moge<T>::hage)
{}
hoge(moge<int>::hage{});
hogeの呼び出しができません。hogeをどう変えればいいですか。
146:デフォルトの名無しさん
16/12/01 15:05:36.97 SwKXepyG.net
>>145
hoge<int>(moge<int>::hage());
147:デフォルトの名無しさん
16/12/01 15:17:40.11 vPHgqg3S.net
呼び出しの方は変えたくないです
Tがどの型でも呼び出せるようにするにはどうすればいいですか
148:デフォルトの名無しさん
16/12/01 15:38:14.38 O+yJrb2h.net
俺はテンプレートなんか自分ではめったに書かないし
テンプレートの型推論のメカニズムも何も知らないが
要はhoge()の中でTが得られれば良いんでしょ?
template<typename T> struct moge
{
struct hage{ typedef T type; };
};
template<typename U> void hoge( U arg )
{
typedef U::type T;
}
hoge(moge<int>::hage{});
一応これでコンパイルは通る
149:デフォルトの名無しさん
16/12/01 15:39:23.16 X/1wKSRH.net
>>101
拾いきれない例外は外にふっとんでいく
150:デフォルトの名無しさん
16/12/01 15:41:27.17 SwKXepyG.net
>>141
正社員より年収の良い派遣社員だよ、basic_stringさんは。
しかも、boost の文字列操作ライブラリの強力な支援を受けられる最強の八方美人。
151:デフォルトの名無しさん
16/12/01 15:42:30.64 vPHgqg3S.net
それだとtypeを持った型ならなんでも受け付けてしまいます
mogeのhageしか受け付けないhogeが必要です
152:デフォルトの名無しさん
16/12/01 16:29:20.65 aVqOQbdr.net
コンパイラ無いから試せないけど、呼び出しに{}いるんだっけ?
153:デフォルトの名無しさん
16/12/01 16:59:12.87 umvXirxE.net
clang: candidate template ignored: couldn't infer template argument 'T'
gcc: candidate: template<class T> void hoge(typename moge<T>::hage)
template argument deduction/substitution failed:
couldn't deduce template parameter 'T'
cl:
'hoge': no matching overloaded function found
'void hoge(moge<T>::hage)': could not deduce template argument for 'T'
see declaration of 'hoge'
みんな口を揃えて「Tが推定できない」と言ってくる
じゃあ、Tを明示的に与えては?
hoge<int>(moge<int>::hage{});
ちょっと腹立つけど、typenameだのtemplateだのの前置と
ウザさはそう変わらんと思う
154:デフォルトの名無しさん
16/12/01 17:04:30.75 umvXirxE.net
ヘルパー関数を用意するとか
template <typename T>
void hige()
{
hoge<T>(moge<T>::hage{});
}
155:デフォルトの名無しさん
16/12/01 17:06:57.95 umvXirxE.net
ラムダ式でも似たようなのできるな
auto closure = [](auto arg){ hoge<decltype(arg)>(moge<decltype(arg)>::hage{}); };
closure(1);
156:デフォルトの名無しさん
16/12/01 17:12:07.19 vPHgqg3S.net
hoge(moge<int>::hage());
呼び出し方はこうでないといけないのです
hogeの定義の方をなんとかしてできませんか
157:デフォルトの名無しさん
16/12/01 17:20:15.24 EvfhiEON.net
template<typename T> struct moge {
struct hage{ using type = T; };
};
template<typename T>
std::enable_if_t<std::is_same<T, typename moge<typename T::type>::hage>::value>
hoge(T) {};
158:デフォルトの名無しさん
16/12/01 18:08:07.28 rYSe/HxL.net
すでに終わった話を引っ張るのが建設的とはとても思えないんだが...
まあ、なんか悔しいんなら一人でやっててくれ w
159:デフォルトの名無しさん
16/12/01 18:49:53.87 Xkx3qm7U.net
>>157
hoge関数をどう変えるかと聞いてるのに
勝手にmogeの定義を変えるお題改変野郎
160:デフォルトの名無しさん
16/12/01 19:01:40.82 aVqOQbdr.net
>>156でなんか問題あるの?
161:デフォルトの名無しさん
16/12/01 19:13:39.34 xNXWtXQs.net
答えられないと「俺のお題改変に文句付けるのか」
「何が気に入らんのやワレ」と圧力
162:デフォルトの名無しさん
16/12/01 19:14:31.57 O+yJrb2h.net
>>159
現実問題としては、using type = T は無くても有ってもかまわないんだろうよ
実際のコードのhageの中身がどうなっているかわからないが
Tを使ったメンバがあるならdecltypeでTは取得できるし
Tを使ったメンバがないなら
おそらくはhageの処理をするのにTは要らない公算が高いだろ
hoge()が何をする関数かわからないから何とも言えないが
using type = T はサービスみたいなものじゃないかな
163:デフォルトの名無しさん
16/12/01 19:15:49.51 vPHgqg3S.net
>>160
コンパイル通りません
153のようなエラーが出ます
164:デフォルトの名無しさん
16/12/01 20:31:23.58 O3rxu16z.net
>現実問題としては、using type = T は無くても有ってもかまわないんだろうよ
質問者以外の者がどうして根拠なしに決めつけようとするのか疑問だ
math.hにM_PIを入れただけで因縁をつけられてしまうというのに
165:デフォルトの名無しさん
16/12/01 21:42:58.03 O+yJrb2h.net
だから質問者に良いかどうか決めてもらえばよいだろって話
質問者が納得さえすればそれで終わりなんだからさ
それなのにこの質問者は>>157についてはノーコメントなんだよ
166:デフォルトの名無しさん
16/12/01 23:10:33.41 O3rxu16z.net
本気で質問しているようにも見えなかったが「できませんか」と訊かれているのだから
まず「出来ません」と回答しないと>>156は納得しないのではないだろうか。
可否がはっきりしない状態で質問通りでない代替案に誘導したらお題改変と罵られても致し方ない
167:デフォルトの名無しさん
16/12/01 23:22:29.15 O+yJrb2h.net
おまえなー、それなー
いいかげんにしろよな
お前、俺に>>164で何て言った?
168:デフォルトの名無しさん
16/12/01 23:42:50.11 SwKXepyG.net
min(x,y)とmax(x,y)の定義がマクロ版とテンプレート版が混在して悶絶した経験のある人だけが石を投げなさい。
169:デフォルトの名無しさん
16/12/01 23:46:56.05 rFASmZLg.net
マクロ版min,maxは消せるけど
170:デフォルトの名無しさん
16/12/02 00:39:59.68 pucVjZc7.net
質問です。
URLリンク(ideone.com)
配列と要素数を受け取るクラスにvectorを渡したい時のスマートな方法を教えて下さい。
171:デフォルトの名無しさん
16/12/02 00:46:20.74 xqmmn7KF.net
vectorが変更しないならそれでいいだろうけど
そのコードみたいにpush_backするならhogeクラスには渡したくない
素直に考えるならvectorごと渡すクラスにすべきだが・・・
172:デフォルトの名無しさん
16/12/02 00:56:10.11 vQsfzK7a.net
>>156の
>"hogeの定義の方"をなんとかしてできませんか
はできないからあきらめれよ!ってこと?
173:デフォルトの名無しさん
16/12/02 01:11:57.66 EkOvBjK1.net
>>170
URLリンク(ideone.com)
これでいいじゃん
constの参照だと参照を握ったままになるから常に反映される
174:デフォルトの名無しさん
16/12/02 01:17:41.14 BG6OiKaZ.net
既存のライブラリをそのまま使いたいのでクラスの変更はなしの方向でお願いします
ラムダ式でコピーコンストラクタを呼ぶ方法がいいのかな
URLリンク(ideone.com)
175:デフォルトの名無しさん
16/12/02 01:46:59.92 bQI5jx4o.net
この状況だとvectorを直接からめた時点でスマートじゃなくなるだろ
unique_ptrとか補助に使ってnew[]で確保した領域に値をコピーして渡すのが結局スマート(賢い)
176:デフォルトの名無しさん
16/12/02 01:50:25.88 FOrSERG0.net
vector用のオーバーロード作ればいいんじゃないのか
177:デフォルトの名無しさん
16/12/02 01:59:15.75 EkOvBjK1.net
>>174
size()を使ってる点でおかしいよ
vectorのインスタンスを無視するつもりか
178:デフォルトの名無しさん
16/12/02 02:33:56.52 kfHVwGjq.net
>>177
君は間違っている。
STLでも begin() と end() で範囲指定するだろ。
イテレータがない型にも対応しようと思えば、先頭ポインタとサイズを渡すのが正しい。
179:デフォルトの名無しさん
16/12/02 02:49:25.45 l8IxU+t8.net
クラス変更無しでvector渡したいなら、ラッパを作って
配列と要素数を更新してからメソッド呼ぶようにするしかないんじゃないかな?
180:デフォルトの名無しさん
16/12/02 05:46:11.27 na0ypgqO.net
何が問題でどうしたいのか明確にしてないからこんな風にとっちらかった回答になるんだよな
181:デフォルトの名無しさん
16/12/02 07:22:37.66 nGP8T2R9.net
質問者本人はこれ以上無いくらいに明確にしたつもり
182:デフォルトの名無しさん
16/12/02 07:57:25.48 na0ypgqO.net
>>181
本人?
意図不明なラムダ使った未定義動作のコードで明確にしたつもりって言われてもなあ
183:デフォルトの名無しさん
16/12/02 08:20:31.67 4/nN0nxx.net
明確でないならスルーしとけばいい
明確でないから自分の都合で改編するとか迷惑なだけ
184:デフォルトの名無しさん
16/12/02 09:56:01.01 tdlBqAAM.net
>>174
連続格納が保証されてるのだから
&a[0]を渡せばいいよ
185:デフォルトの名無しさん
16/12/02 10:09:51.51 HWcr/nXn.net
そもそもの基本
◎ int* に vector<int> は渡せない
相手が int* でビルトイン[]演算子を使う限り、
vector ではなく生の配列を用意する以外に選択肢はない
186:デフォルトの名無しさん
16/12/02 10:30:03.38 na0ypgqO.net
明確にしたとしても
>>185
みたいに何も解ってない初心者がでしゃばって見当違いな回答する事も多かったな
187:デフォルトの名無しさん
16/12/02 10:53:45.98 HWcr/nXn.net
そもそもの基本を指摘されて発狂するようなガイキチが暴れてただけだろ
188:デフォルトの名無しさん
16/12/02 10:59:49.79 dQ26sSxp.net
>>170
ラッパーかヘルパーを用意して、vectorはそっちで処理する。
189:デフォルトの名無しさん
16/12/02 11:04:51.34 na0ypgqO.net
>>187
お前は何のためにstd::vector<T>::dataがT*を返すと思ってんの?
190:デフォルトの名無しさん
16/12/02 12:06:38.84 kfHVwGjq.net
vector::data()が追加されたのはC++11 からだから古い入門書には載ってない。
だから安易にdata()を使えと回答する人もまた入門者に近しい。
191:デフォルトの名無しさん
16/12/02 12:12:12.15 jbEu1BDa.net
どうも論理が飛躍しているな
192:デフォルトの名無しさん
16/12/02 12:28:12.29 7EcjjmS3.net
質問者はラムダ使ってるんだからdata()使えるでしょ
193:デフォルトの名無しさん
16/12/02 12:29:35.07 dQ26sSxp.net
>>190
古い入門書を想定しろ、はさすがに言いがかりがひどすぎる。
194:デフォルトの名無しさん
16/12/02 12:36:41.22 oWLJBZXg.net
AnsiString::data()のパクリか…
195:デフォルトの名無しさん
16/12/02 12:38:30.29 oWLJBZXg.net
いや、string::data()か
196:デフォルトの名無しさん
16/12/02 14:14:03.78 uzv70fAD.net
data()はいいけど、vectorにemplace_back()したらsize()も変化するんだが
それが渡したクラスでは反映されないってのが問題だと思ってたんだが勘違い?
197:デフォルトの名無しさん
16/12/02 14:59:13.58 7EcjjmS3.net
俺もそう思ってた
もっといえば要素増やすとdata()の場所がかわってアクセス違反になるかもしれなくて困ると言うことかと
198:デフォルトの名無しさん
16/12/02 15:03:09.14 uzv70fAD.net
>>197
あーそれはあるね
どんどん要素を増やして行くと再newしてそこに全部要素コピーされなおして
元のアドレスは無効になるってのがあったな
だからvectorをメンバに持つのを頑なに拒否する理由がわからない
199:デフォルトの名無しさん
16/12/02 15:13:55.45 kfHVwGjq.net
なんだか急にスレのレベルが落ちたのはなぜ?
他の場所で使うためのvectorをメンバ変数にするとか勝手なこと言いだしているし、精神病っぽいんだが。