https://mevius.5ch.net/test/read.cgi/tech/1589424805/
※前スレ
C++相談室 part152
https://mevius.5ch.net/test/read.cgi/tech/1594528940/
テンプレおしまい
C++相談室 part153
■ このスレッドは過去ログ倉庫に格納されています
2020/10/10(土) 23:18:20.00ID:i4F+i14Y
2020/10/13(火) 23:50:29.75ID:jGpIs/AO
>>81
>あと開始がポインタで終わりもポインタってのは対称的で良いと思う
良くないよ。
その対称性は不要。
むしろ copyするときに dstとsrcの対称性がなくなることの方がずっと問題。
なぜなら間違い易いから。
それに
fill(dim, dim + 100, 0);
と書くときも dimの部分にケアレスミスが生じ易く、たとえば、
fill(dim1, dim2 + 100, 0);
と書いてもコンパイルエラーにはならないが結果は重大である。
>あと開始がポインタで終わりもポインタってのは対称的で良いと思う
良くないよ。
その対称性は不要。
むしろ copyするときに dstとsrcの対称性がなくなることの方がずっと問題。
なぜなら間違い易いから。
それに
fill(dim, dim + 100, 0);
と書くときも dimの部分にケアレスミスが生じ易く、たとえば、
fill(dim1, dim2 + 100, 0);
と書いてもコンパイルエラーにはならないが結果は重大である。
2020/10/13(火) 23:51:31.80ID:jGpIs/AO
2020/10/13(火) 23:56:23.05ID:SS1TQwr/
> fill(dim1, dim2 + 100, 0);
そう間違えちゃう人は
fill(dim1, dim1 + 200, 0);
fill(dim1, dim1 + 100, 2);
fill(dim2, dim1 + 100, 0);
とも間違っちゃうから大変だね
そういう人は何より
fill(dim2, 100, 0);
の表記を使いたいんやろね
何か分かったわ
そう間違えちゃう人は
fill(dim1, dim1 + 200, 0);
fill(dim1, dim1 + 100, 2);
fill(dim2, dim1 + 100, 0);
とも間違っちゃうから大変だね
そういう人は何より
fill(dim2, 100, 0);
の表記を使いたいんやろね
何か分かったわ
2020/10/13(火) 23:58:38.02ID:BWJh5EXt
全然別のコンテナのイテレータを混ぜて指定できてしまうのは確かに欠点なんだよね
だからRangeが必要だったんですね
だからRangeが必要だったんですね
2020/10/14(水) 00:11:56.45ID:lJFXTbVx
2020/10/14(水) 00:20:29.03ID:lJFXTbVx
>>86
それに、先頭アドレスと長さを組にするというのは、プログラミングにおける
伝統になっていてPascal文字列やWin32のバッファの指定などもそれを
踏襲している。
topとbtmを指定する方法は番兵方式ともまた違う、STL独特の方式。
番兵方式はミスが入りにくいが、btmアドレスを指定する方式はbtmに
間違った値をしていた時にとんでも無い結果を生み、バッファオーバーラン
より酷い。
btmにtopとは全く関係の無いとんでもない値を指定できてしまうから。
配列は、0〜N-1までの分かり易い値で位置を指定できることが特徴の一つなのに
STLはそれも破壊してしまっており、範囲チェックも分かりにくくなる。
高級言語なのに、アセンブラより複雑。
アセンブラでは少しでも高速化するためにtop,btm方式が使われたこともあったが、
この高級言語の時代にはそぐわない。
分かりにくい。
それに、先頭アドレスと長さを組にするというのは、プログラミングにおける
伝統になっていてPascal文字列やWin32のバッファの指定などもそれを
踏襲している。
topとbtmを指定する方法は番兵方式ともまた違う、STL独特の方式。
番兵方式はミスが入りにくいが、btmアドレスを指定する方式はbtmに
間違った値をしていた時にとんでも無い結果を生み、バッファオーバーラン
より酷い。
btmにtopとは全く関係の無いとんでもない値を指定できてしまうから。
配列は、0〜N-1までの分かり易い値で位置を指定できることが特徴の一つなのに
STLはそれも破壊してしまっており、範囲チェックも分かりにくくなる。
高級言語なのに、アセンブラより複雑。
アセンブラでは少しでも高速化するためにtop,btm方式が使われたこともあったが、
この高級言語の時代にはそぐわない。
分かりにくい。
2020/10/14(水) 00:24:28.14ID:lJFXTbVx
もっといえば、MSがグラフィックで矩形を描くときに、
左上の点と右下の点を指定する方法もセンスが無いといわれている。
これも沢山グラフィックのプログラムをしてくると
左上の点と「サイズ」を指定するのが合理的であることが分かってくるが
経験が足りて無い人には「好みの差」程度にしか認識できない。
それともとても似ている。
左上の点と右下の点を指定する方法もセンスが無いといわれている。
これも沢山グラフィックのプログラムをしてくると
左上の点と「サイズ」を指定するのが合理的であることが分かってくるが
経験が足りて無い人には「好みの差」程度にしか認識できない。
それともとても似ている。
2020/10/14(水) 00:34:35.60ID:eS9CcskG
ID:lJFXTbVxが参加するレビューは荒れる…
…!
…!
2020/10/14(水) 00:36:44.29ID:eS9CcskG
つか(sx, sy, width, height)式の矩形表現は
クリッピングとかしだすと結局内部で
(sx, sy, ex, ey)表現に
クリッピングとかしだすと結局内部で
(sx, sy, ex, ey)表現に
2020/10/14(水) 00:40:01.03ID:eS9CcskG
効率的な番兵法は常にアルゴリズムとともにあるから
↓こんなやつ
while (buf[i] < buf[i]) { std::swap(buf[i], buf[i]); i--; } // buf[0]はINT_MAX
範囲の一般的表現のうちに含めるのは頭おかしい
↓こんなやつ
while (buf[i] < buf[i]) { std::swap(buf[i], buf[i]); i--; } // buf[0]はINT_MAX
範囲の一般的表現のうちに含めるのは頭おかしい
2020/10/14(水) 00:44:56.12ID:W3antmDc
fill(p, p + n, 0);は
fill(p + m, p + n, 0);という表現にもスムーズに拡張できる
個数の場合は
fill(p + m, n - m, 0);って書くことになるね
fill(p + m, p + n, 0);という表現にもスムーズに拡張できる
個数の場合は
fill(p + m, n - m, 0);って書くことになるね
2020/10/14(水) 00:47:49.37ID:g6nWODwp
ここまで fill_n 無し
2020/10/14(水) 01:12:33.89ID:qrfIlgcS
>>88
なんで?中心の点とサイズなら分かるけど
ついでに言うと左上右下で矩形表現するのは重なりや画面外は見出しの判定が楽だからそっちの方が便利な場合もある
事情に応じた使い分けを考慮できないあたりが経験足りないっすねあなた
なんで?中心の点とサイズなら分かるけど
ついでに言うと左上右下で矩形表現するのは重なりや画面外は見出しの判定が楽だからそっちの方が便利な場合もある
事情に応じた使い分けを考慮できないあたりが経験足りないっすねあなた
2020/10/14(水) 02:21:44.28ID:dCmiKU7l
2020/10/14(水) 02:44:00.29ID:EuYzPNma
てか
せっかくC++使ってんのに何故
リストの始点と終点とを別々に渡したり
リストの始点と要素数とを別々に渡したり
とかやりたがるの?
せっかくC++使ってんのに何故
リストの始点と終点とを別々に渡したり
リストの始点と要素数とを別々に渡したり
とかやりたがるの?
2020/10/14(水) 06:39:07.67ID:fAfIBrSZ
2020/10/14(水) 06:42:43.22ID:fAfIBrSZ
2020/10/14(水) 06:45:09.59ID:fAfIBrSZ
>>96
全要素とは限らないからだよ
全要素とは限らないからだよ
100デフォルトの名無しさん
2020/10/14(水) 06:46:30.43ID:fAfIBrSZ fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個
fill(dim + 2, dim + 98, 0); //引数3個
101デフォルトの名無しさん
2020/10/14(水) 07:58:42.58ID:qpMvVLdo >>83
ケアレスミス多いな。
ケアレスミス多いな。
102デフォルトの名無しさん
2020/10/14(水) 08:14:56.28ID:eS9CcskG103デフォルトの名無しさん
2020/10/14(水) 08:25:44.48ID:fAfIBrSZ104デフォルトの名無しさん
2020/10/14(水) 09:06:12.19ID:+cbHRaf/ 完全に初心者のイチャモンで、他の言語も使えて無さそうだから、何か一つやり遂げてみたら良いと思います。
105デフォルトの名無しさん
2020/10/14(水) 09:18:06.97ID:fAfIBrSZ 具体性のない、更には漠然としすぎて一体何の話かわからんことしか言えないやつこそ初心者だろうが
106デフォルトの名無しさん
2020/10/14(水) 09:31:01.91ID:eS9CcskG107デフォルトの名無しさん
2020/10/14(水) 09:31:55.45ID:eS9CcskG 訂正orz、
×: 修正
○: 値を変更
×: 修正
○: 値を変更
108デフォルトの名無しさん
2020/10/14(水) 09:39:06.95ID:aLuhanwR int引数にconst付ける意味ってなんですか?
値渡しされるのだから関数内で値が更新されても呼び出し元には関係ないこと(関心がないこと)だと思えますが
値渡しされるのだから関数内で値が更新されても呼び出し元には関係ないこと(関心がないこと)だと思えますが
109デフォルトの名無しさん
2020/10/14(水) 09:42:59.50ID:eS9CcskG >>108
>呼び出し元には関係ないこと(関心がないこと)
左様
呼び出し元に見せる宣言文では値渡しのconstは外して良い
C++ならそれができる
Cではできない(constをつけるとしたら定義と宣言の両方に付けねばならない
>呼び出し元には関係ないこと(関心がないこと)
左様
呼び出し元に見せる宣言文では値渡しのconstは外して良い
C++ならそれができる
Cではできない(constをつけるとしたら定義と宣言の両方に付けねばならない
110デフォルトの名無しさん
2020/10/14(水) 09:43:23.77ID:lJFXTbVx >>92
あなたは経験不足だからどちらの方が便利かが分かって無い。
どちらの方式も互いに単純変換できるが、現実のアプリにおいては個数の方が
便利だと言っているのだが、あなたにはそれが分からない。
そういう人達がC++委員会に多くなってきているからC++の仕様が変になって
きていると言われているのだよ。
あなたは経験不足だからどちらの方が便利かが分かって無い。
どちらの方式も互いに単純変換できるが、現実のアプリにおいては個数の方が
便利だと言っているのだが、あなたにはそれが分からない。
そういう人達がC++委員会に多くなってきているからC++の仕様が変になって
きていると言われているのだよ。
111デフォルトの名無しさん
2020/10/14(水) 09:45:58.36ID:lJFXTbVx >>100
>fill(dim, 2, 98, 0); //引数4個
これは違う。
インタプリタ言語ではこのようになってしまうが、伝統的にはCでは、
fill(dim +2, 98, 0); //引数3個
と書ける。
>fill(dim, 2, 98, 0); //引数4個
これは違う。
インタプリタ言語ではこのようになってしまうが、伝統的にはCでは、
fill(dim +2, 98, 0); //引数3個
と書ける。
112デフォルトの名無しさん
2020/10/14(水) 09:50:15.45ID:fAfIBrSZ113デフォルトの名無しさん
2020/10/14(水) 09:52:34.69ID:eS9CcskG ていうか>>91まつがえた。n_、
正: while (buf[i-1] < buf[i]) { std::swap(buf[i-1], buf[i]); i--; } // buf[0]はINT_MAX
アウチ、
正: while (buf[i-1] < buf[i]) { std::swap(buf[i-1], buf[i]); i--; } // buf[0]はINT_MAX
アウチ、
114デフォルトの名無しさん
2020/10/14(水) 10:09:01.38ID:lJFXTbVx115デフォルトの名無しさん
2020/10/14(水) 10:31:42.62ID:Z4l68xx0 ライブラリの良し悪しは俺様の流儀に従っているかどうか、まで読んだ
116デフォルトの名無しさん
2020/10/14(水) 10:52:50.19ID:fAfIBrSZ117デフォルトの名無しさん
2020/10/14(水) 11:20:31.96ID:fAfIBrSZ118デフォルトの名無しさん
2020/10/14(水) 11:38:41.41ID:+cbHRaf/ 「個数のほうが便利で現代的で洗練されている」と言ってる人は、STLが何故このような設計になったのか、全く理解していないので
、公共の場で主張するのはよくないのでは?
、公共の場で主張するのはよくないのでは?
119デフォルトの名無しさん
2020/10/14(水) 11:43:45.06ID:RddNL28g STLは何故このような設計になったか教えて
120デフォルトの名無しさん
2020/10/14(水) 11:44:04.35ID:dCmiKU7l >現代的で洗練されている
誰がそんなこと書いてんだ
てか現代的とか洗練とかアホかと
なぜそうなっているか理解出来てないのはお前、D&Eの日本語版にその辺の話は載ってるから読んでこい
誰がそんなこと書いてんだ
てか現代的とか洗練とかアホかと
なぜそうなっているか理解出来てないのはお前、D&Eの日本語版にその辺の話は載ってるから読んでこい
121デフォルトの名無しさん
2020/10/14(水) 11:53:23.30ID:fAfIBrSZ 標準を盲信しろとは言わない
おかしいと思うことはおかしいと言っていい
いい、つーか歓迎で議論には付き合う
「議論には」な、感情論だの押しつけだの
そういう見苦しいのは相手せん
おかしいと思うことはおかしいと言っていい
いい、つーか歓迎で議論には付き合う
「議論には」な、感情論だの押しつけだの
そういう見苦しいのは相手せん
122デフォルトの名無しさん
2020/10/14(水) 12:09:10.96ID:lJFXTbVx >>117
あなたが何も書いてなかったから、98は個数だと認識して書いた。
もし、btm要素であるなら、
fill(dim + 2, dim + 98, 0);
と書くことになるが、このような btm 要素を指定する書き方が現実的な
アプリではコーディング的に非効率な問題のある書き方だと昨日から主張し続けている。
あなたが何も書いてなかったから、98は個数だと認識して書いた。
もし、btm要素であるなら、
fill(dim + 2, dim + 98, 0);
と書くことになるが、このような btm 要素を指定する書き方が現実的な
アプリではコーディング的に非効率な問題のある書き方だと昨日から主張し続けている。
123デフォルトの名無しさん
2020/10/14(水) 12:15:37.74ID:lJFXTbVx >>122
なぜかといえば、現実の大規模アプリでは配列の先頭の名前は、もっとずっと長く、
たとえば、aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
のようになっていることが多い。それで昔ながらの C スタイルであれば、
fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, 個数, value);
と書けば済むのに、STLスタイルだと、
fill_stl(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx,
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx + 個数,
value);
のように複数行で書かないといけないハメになってしまう。
そして、aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxxに似た
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
というような他の変数もあることが多く、そうなると、
fill_stl(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx,
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx + 個数,
value);
のように書き間違えてもコンパイルエラーにならないので非常に重大な問題を巻き起こす。
また、少し修正したい場合、topとbtmの両方を修正しなくてはならないのに、
どちらか片方の
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
だけを
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
に書き換えてしまって変数名が長いので気づきにくくてどこでバグが入ったか分からない
重大な問題が入り込んでしまうことが有る。
その点、昔ながらのCスタイルではこのような問題が起きないので安全。
なぜかといえば、現実の大規模アプリでは配列の先頭の名前は、もっとずっと長く、
たとえば、aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
のようになっていることが多い。それで昔ながらの C スタイルであれば、
fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, 個数, value);
と書けば済むのに、STLスタイルだと、
fill_stl(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx,
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx + 個数,
value);
のように複数行で書かないといけないハメになってしまう。
そして、aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxxに似た
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
というような他の変数もあることが多く、そうなると、
fill_stl(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx,
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx + 個数,
value);
のように書き間違えてもコンパイルエラーにならないので非常に重大な問題を巻き起こす。
また、少し修正したい場合、topとbtmの両方を修正しなくてはならないのに、
どちらか片方の
aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx
だけを
aXxxxXxxxXxxxXxxxXxxxXxxxYyyyXxxx
に書き換えてしまって変数名が長いので気づきにくくてどこでバグが入ったか分からない
重大な問題が入り込んでしまうことが有る。
その点、昔ながらのCスタイルではこのような問題が起きないので安全。
124デフォルトの名無しさん
2020/10/14(水) 12:20:41.76ID:GsUUoEHv なるほど一里塚
125デフォルトの名無しさん
2020/10/14(水) 12:23:42.24ID:fAfIBrSZ >>123
只でさえ長い識別子に名前空間だのスコープだのテンプレート引数がついて読む気なくさせるようなのはよく見かけるね
そういうのはusingでエイリアス作ったり左辺値参照でスコープを狭めたりで対応するのがよくあるケース
auto first = aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.begin();
auto last = aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.end();
とでもやっとけば楽になるのもある
昔ながらのCやC++98にしがみつくのをやめてC++11〜17の新機能を有り難く頂戴することで
色んなストレスから解放される
只でさえ長い識別子に名前空間だのスコープだのテンプレート引数がついて読む気なくさせるようなのはよく見かけるね
そういうのはusingでエイリアス作ったり左辺値参照でスコープを狭めたりで対応するのがよくあるケース
auto first = aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.begin();
auto last = aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.end();
とでもやっとけば楽になるのもある
昔ながらのCやC++98にしがみつくのをやめてC++11〜17の新機能を有り難く頂戴することで
色んなストレスから解放される
126デフォルトの名無しさん
2020/10/14(水) 12:40:03.79ID:ssGc8zMA >>123
「個数」で誤魔化されてんな
個数でもこうなるんじゃね
fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.size(), value);
「個数」で誤魔化されてんな
個数でもこうなるんじゃね
fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.size(), value);
127デフォルトの名無しさん
2020/10/14(水) 12:52:15.34ID:lJFXTbVx >>126
それは経験的にならないことが多い。
なぜなら、個数は配列自体が覚えているだけでなく、何らかの変数に入っている事がとても多いから。
典型的には、個数はマクロ変数やconst int変数などに入っているか
または、ファイルから読み込んだ場合には読み込んだときの個数が
グローバル変数などに入っている。
それは経験的にならないことが多い。
なぜなら、個数は配列自体が覚えているだけでなく、何らかの変数に入っている事がとても多いから。
典型的には、個数はマクロ変数やconst int変数などに入っているか
または、ファイルから読み込んだ場合には読み込んだときの個数が
グローバル変数などに入っている。
128デフォルトの名無しさん
2020/10/14(水) 12:55:51.73ID:lJFXTbVx >>127
それから、
>fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.size(), value);
の場合だと、たとえ第二引数の部分に間違いがあってもバグの程度がまだまし。
なぜなら、xxx.size()は個数なので間違いがあってもデバッガで見てもまだ分かり易いバグとなるし、
バッファオーバーランしても個数なのでどこかで停止してくれる。
ところが、btm要素方式の場合、書き間違えてbtm要素が全く別の配列の中を指してしまっている場合には
バッファオーバーランが停止することなくほぼ無限に続くことになる。
それから、
>fill(aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx, aXxxxXxxxXxxxXxxxXxxxXxxxXxxxXxxx.size(), value);
の場合だと、たとえ第二引数の部分に間違いがあってもバグの程度がまだまし。
なぜなら、xxx.size()は個数なので間違いがあってもデバッガで見てもまだ分かり易いバグとなるし、
バッファオーバーランしても個数なのでどこかで停止してくれる。
ところが、btm要素方式の場合、書き間違えてbtm要素が全く別の配列の中を指してしまっている場合には
バッファオーバーランが停止することなくほぼ無限に続くことになる。
129デフォルトの名無しさん
2020/10/14(水) 13:02:09.57ID:ssGc8zMA つまりずっと配列前提の話をしてたワケ?
そりゃ旧来的な書き方の方が合理的だ
配列とその個数のデータ構造なら明らかにdefineされてる個数を与えた方がラクになるな
そりゃ旧来的な書き方の方が合理的だ
配列とその個数のデータ構造なら明らかにdefineされてる個数を与えた方がラクになるな
130デフォルトの名無しさん
2020/10/14(水) 13:02:59.84ID:tpi9enQu stl以前にエディタもまともに使えないって
131デフォルトの名無しさん
2020/10/14(水) 13:04:53.29ID:lJFXTbVx >>128
さらに、その場合、全要素を対象にしているから専用の関数などや
for each文などで対応できる。
一方、良くある例として、あるところから10個の要素に対して処理したい
などというものがある。
それは例えば、エディタを作っている場合に画面内に10行表示されていることが
分かっている場合だ。
そういう場合に、C流だと
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top], 10);
で良いのに対し、STL流だと
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top], &aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top + 10]);
ととても長くなる。
さらに、その場合、全要素を対象にしているから専用の関数などや
for each文などで対応できる。
一方、良くある例として、あるところから10個の要素に対して処理したい
などというものがある。
それは例えば、エディタを作っている場合に画面内に10行表示されていることが
分かっている場合だ。
そういう場合に、C流だと
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top], 10);
で良いのに対し、STL流だと
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top], &aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top + 10]);
ととても長くなる。
132デフォルトの名無しさん
2020/10/14(水) 13:05:56.40ID:lJFXTbVx >>129
STLはリンクリストではなく、(動的)配列を推薦しているから。
STLはリンクリストではなく、(動的)配列を推薦しているから。
133デフォルトの名無しさん
2020/10/14(水) 13:11:45.84ID:lJFXTbVx >昔ながらのCやC++98にしがみつくのをやめてC++11〜17の新機能を有り難く頂戴することで
>色んなストレスから解放される
同意しかねます。
>色んなストレスから解放される
同意しかねます。
134デフォルトの名無しさん
2020/10/14(水) 13:20:20.16ID:ssGc8zMA >>131
にしてもdefineされてる配列の個数の名前もお長いんでしょ?
#define A_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_SIZE (100000)
#define A_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_YYYY_XXXX_SIZE (100000)
***
今度は「個数」の代わりに「10」になってる
行数を受け取る変数名もやっぱり長いんじゃなくて?
肝心のところを短く書いてるから、短く見える
こういう変数になるんじゃないのかな
const int aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx_Lines = get_draw_lines();
にしてもdefineされてる配列の個数の名前もお長いんでしょ?
#define A_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_SIZE (100000)
#define A_XXXX_XXXX_XXXX_XXXX_XXXX_XXXX_YYYY_XXXX_SIZE (100000)
***
今度は「個数」の代わりに「10」になってる
行数を受け取る変数名もやっぱり長いんじゃなくて?
肝心のところを短く書いてるから、短く見える
こういう変数になるんじゃないのかな
const int aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx_Lines = get_draw_lines();
135デフォルトの名無しさん
2020/10/14(水) 13:22:47.51ID:EoVZjJO9 よくこんなくだらないことに熱くなれるな
136デフォルトの名無しさん
2020/10/14(水) 13:32:19.34ID:+cbHRaf/ STLは設計のお手本的な部分があり、誰もが良く学ぶべきだけど、今回の事例で初心者がどう感じるのか、データが取れたのでは?
137デフォルトの名無しさん
2020/10/14(水) 13:34:00.13ID:lJFXTbVx >>134
その様な場合でも、
C流:
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top],
numXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx);
STL流:
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top],
&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top + numXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx]);
となりC流の方がまだまし。
それとC流だとハンガリアン記法で名前を付けて置けば、なんとかなってる。
STL流は最悪で、非常に危険な書き方。
その様な場合でも、
C流:
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top],
numXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx);
STL流:
draw_lines(&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top],
&aXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx[top + numXxxXxxXxxXxxXxxXxxXxxXxxXxxXxx]);
となりC流の方がまだまし。
それとC流だとハンガリアン記法で名前を付けて置けば、なんとかなってる。
STL流は最悪で、非常に危険な書き方。
138デフォルトの名無しさん
2020/10/14(水) 13:34:55.35ID:HhRPmWpc 初心者は「ぼくちんのコードが長くなるからこの設計はクソ!」と言いがちなことが分かったので今後の教育の時に注意しようと思いました
139デフォルトの名無しさん
2020/10/14(水) 13:35:10.63ID:lJFXTbVx140デフォルトの名無しさん
2020/10/14(水) 13:35:22.62ID:+cbHRaf/ 引数に個数を指定するほうが洗練されていると初心者が言うけれど、設計の観点から言えば、事前に個数がわからなくても呼び出せるほうが汎用性がある。
つまり、ジェネリック。
つまり、ジェネリック。
141デフォルトの名無しさん
2020/10/14(水) 13:37:07.37ID:+cbHRaf/ STLごときでつまずいてたら、関数型なんかさっぱり理解できないだろな。
142デフォルトの名無しさん
2020/10/14(水) 13:40:26.69ID:+cbHRaf/ 2chだった頃、このスレでもプッシュ型インターフェースが流行りかけてたんだよな。
5chになって若干質が落ちたんじゃないだろか。
5chになって若干質が落ちたんじゃないだろか。
143デフォルトの名無しさん
2020/10/14(水) 13:41:57.79ID:HhRPmWpc 初心者くんはこの世の全ての範囲のendが「先頭からの個数」で決まる場合しかないと思い込んでるみたいだけど
例えばfindの検索結果とか、GUIの現在カーソル位置とかで決まる場合もあって、その場合だと本質的でない「個数」という数字を求めるコードが結局長くなってしまうことに注意しよう
簡単な練習問題だよ
例えばfindの検索結果とか、GUIの現在カーソル位置とかで決まる場合もあって、その場合だと本質的でない「個数」という数字を求めるコードが結局長くなってしまうことに注意しよう
簡単な練習問題だよ
144デフォルトの名無しさん
2020/10/14(水) 13:44:01.55ID:ssGc8zMA >>137
その配列のラッパークラスは作らんの?
その配列のラッパークラスは作らんの?
145デフォルトの名無しさん
2020/10/14(水) 13:51:26.20ID:Z4l68xx0 >>127
マクロ変数(定数?)とかグローバル変数とか生配列とか、旧態依然としたCの作法が好きなら無理にC++やSTLを使わずに自分の好きな道具を使えばいいんでないの?
今でも(そして恐らくこれから先も)変わらず使えるのだから。
自分の好みに合わないものを他人が嬉しそうに使ってるのが気に入らないの?
マクロ変数(定数?)とかグローバル変数とか生配列とか、旧態依然としたCの作法が好きなら無理にC++やSTLを使わずに自分の好きな道具を使えばいいんでないの?
今でも(そして恐らくこれから先も)変わらず使えるのだから。
自分の好みに合わないものを他人が嬉しそうに使ってるのが気に入らないの?
146デフォルトの名無しさん
2020/10/14(水) 13:54:48.00ID:OK1/udlE 配列が個数を持ってるなら
fill(配列, 値);
で良くね?
fill(配列, 値);
で良くね?
147デフォルトの名無しさん
2020/10/14(水) 14:08:57.43ID:lJFXTbVx >>141
いや、数学的ならむしろSTLより理解できる。
いや、数学的ならむしろSTLより理解できる。
148デフォルトの名無しさん
2020/10/14(水) 14:35:28.55ID:fAfIBrSZ >>146
常に全要素ならな
常に全要素ならな
149デフォルトの名無しさん
2020/10/14(水) 14:38:31.07ID:fAfIBrSZ > こっちはプログラミングのエキスパートだが。
にーしちゃ恥ずかしいミスしてたね、さっき
fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個
fill(dim +2, 98, 0); //伝統的にはCでは、(中略)と書ける。 ←これw
にーしちゃ恥ずかしいミスしてたね、さっき
fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個
fill(dim +2, 98, 0); //伝統的にはCでは、(中略)と書ける。 ←これw
150デフォルトの名無しさん
2020/10/14(水) 14:39:14.81ID:fAfIBrSZ 引数4個と3個の違いは有耶無耶にしたいのかな?
151デフォルトの名無しさん
2020/10/14(水) 15:03:45.73ID:d5S3+KHs GCC9で-std=c++2aが使えるんだけど…C++20です…これってさぁ…
実験的にサポートみたいな事行ってるけど、使ってもOKなの?
experimental supportって言ってるけど…みんなどうしてるの?
実験的にサポートみたいな事行ってるけど、使ってもOKなの?
experimental supportって言ってるけど…みんなどうしてるの?
152デフォルトの名無しさん
2020/10/14(水) 15:07:19.79ID:ssGc8zMA153デフォルトの名無しさん
2020/10/14(水) 15:14:57.44ID:lJFXTbVx >>149
あなた、話の流れを理解して無いですよ。
あなた、話の流れを理解して無いですよ。
154デフォルトの名無しさん
2020/10/14(水) 15:15:36.27ID:d5S3+KHs C++17で行きます…17でも十分新しい…。
155デフォルトの名無しさん
2020/10/14(水) 15:16:35.85ID:fAfIBrSZ156デフォルトの名無しさん
2020/10/14(水) 15:37:35.37ID:+cbHRaf/157デフォルトの名無しさん
2020/10/14(水) 15:41:12.49ID:lJFXTbVx >>155
今回は、引数の個数は議題にはして無い。
今回は、引数の個数は議題にはして無い。
158デフォルトの名無しさん
2020/10/14(水) 15:45:10.45ID:lJFXTbVx >>157
つまり「引数の個数が多くなるからSTLが問題」などとは全く言って無いということ。
別に個数方式にしても引数が少なくなると言うことではない。
引数の個数ではなく、コーディングする時の引数の記述量を減らせることが多い。
+演算子も使わなくて済むのでケアレスミスも減らせる。
またtopとbtmで重複する事を書かなくて済む。
そしてそれは安全性に繋がる。
なぜなら同じであるべきところを誤って異なるように書く可能性がなくなるから。
つまり「引数の個数が多くなるからSTLが問題」などとは全く言って無いということ。
別に個数方式にしても引数が少なくなると言うことではない。
引数の個数ではなく、コーディングする時の引数の記述量を減らせることが多い。
+演算子も使わなくて済むのでケアレスミスも減らせる。
またtopとbtmで重複する事を書かなくて済む。
そしてそれは安全性に繋がる。
なぜなら同じであるべきところを誤って異なるように書く可能性がなくなるから。
159デフォルトの名無しさん
2020/10/14(水) 15:51:28.70ID:+cbHRaf/ お前の考える正しいライブラリがSTL以上に使われるなら、お前の意見にも一理あるのかもしれないけど。
ここで見た分には、初心者が使い方わからんと騒いでるだけに見える。
ここで見た分には、初心者が使い方わからんと騒いでるだけに見える。
160デフォルトの名無しさん
2020/10/14(水) 15:53:12.69ID:fAfIBrSZ >>157
いやいや、100に対して111の流れは引数の個数だよ
===== 引用開始 =====
100 自分:デフォルトの名無しさん[sage] 投稿日:2020/10/14(水) 06:46:30.43 ID:fAfIBrSZ [4/15]
fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個
111 返信:デフォルトの名無しさん[sage] 投稿日:2020/10/14(水) 09:45:58.36 ID:lJFXTbVx [5/19]
>>100
>fill(dim, 2, 98, 0); //引数4個
これは違う。
インタプリタ言語ではこのようになってしまうが、伝統的にはCでは、
fill(dim +2, 98, 0); //引数3個
と書ける。
===== 引用終了 =====
しかもだよ、これインタプリタ方式とコンパイラ方式でどんな違いが出るの?
変に逃げ回ったり139みたいなプリティ発言するほど墓穴がでかくなるだけだぜ
ミスはミスで潔く認めたほうが被害拡大を防げると思うよ
いやいや、100に対して111の流れは引数の個数だよ
===== 引用開始 =====
100 自分:デフォルトの名無しさん[sage] 投稿日:2020/10/14(水) 06:46:30.43 ID:fAfIBrSZ [4/15]
fill(dim, 2, 98, 0); //引数4個
fill(dim + 2, dim + 98, 0); //引数3個
111 返信:デフォルトの名無しさん[sage] 投稿日:2020/10/14(水) 09:45:58.36 ID:lJFXTbVx [5/19]
>>100
>fill(dim, 2, 98, 0); //引数4個
これは違う。
インタプリタ言語ではこのようになってしまうが、伝統的にはCでは、
fill(dim +2, 98, 0); //引数3個
と書ける。
===== 引用終了 =====
しかもだよ、これインタプリタ方式とコンパイラ方式でどんな違いが出るの?
変に逃げ回ったり139みたいなプリティ発言するほど墓穴がでかくなるだけだぜ
ミスはミスで潔く認めたほうが被害拡大を防げると思うよ
161デフォルトの名無しさん
2020/10/14(水) 15:54:50.74ID:lJFXTbVx162デフォルトの名無しさん
2020/10/14(水) 16:07:49.07ID:lJFXTbVx >>160
>しかもだよ、これインタプリタ方式とコンパイラ方式でどんな違いが出るの?
インタプリタ方式だと必ずそうなると言う意味ではなく、arr + 2
が「3番目の要素のアドレス」の意味で使えるのは、大体コンパイラ系の言語の仕様。
その意味で、
xxx(arr + 2,...) ではなく、xxx(arr, 2,...) のように書くのはインタプリタ言語
に多い書き方だから。
>しかもだよ、これインタプリタ方式とコンパイラ方式でどんな違いが出るの?
インタプリタ方式だと必ずそうなると言う意味ではなく、arr + 2
が「3番目の要素のアドレス」の意味で使えるのは、大体コンパイラ系の言語の仕様。
その意味で、
xxx(arr + 2,...) ではなく、xxx(arr, 2,...) のように書くのはインタプリタ言語
に多い書き方だから。
163デフォルトの名無しさん
2020/10/14(水) 16:49:10.93ID:fAfIBrSZ164デフォルトの名無しさん
2020/10/14(水) 16:53:34.15ID:lJFXTbVx165デフォルトの名無しさん
2020/10/14(水) 17:07:55.33ID:fAfIBrSZ 結局、配列と個数で渡す方式が、始点と終点で渡す方式よりも
優位であることを示すのを諦めたわけだね
示せるわけがないという俺の予想どおりだわ
優位であることを示すのを諦めたわけだね
示せるわけがないという俺の予想どおりだわ
166デフォルトの名無しさん
2020/10/14(水) 17:14:10.14ID:lJFXTbVx >>165
いや、十分に示せているはずなのに、このスレでは頑なに理解して貰えないだけです。
いや、十分に示せているはずなのに、このスレでは頑なに理解して貰えないだけです。
167デフォルトの名無しさん
2020/10/14(水) 17:15:40.91ID:+cbHRaf/ 「我はSTLを超える者なり!!」などと初心者が言い出してビックリしたわ。
168デフォルトの名無しさん
2020/10/14(水) 17:32:06.99ID:EoVZjJO9 これだけくだらない問題に白熱してる時点でセンスがない
169デフォルトの名無しさん
2020/10/14(水) 17:36:09.65ID:fAfIBrSZ >>166
で、配列と個数で渡すことで、始点と終点より引数の個数は減ったのか?
で、配列と個数で渡すことで、始点と終点より引数の個数は減ったのか?
170デフォルトの名無しさん
2020/10/14(水) 17:37:36.44ID:RddNL28g だよね
どの話題に食いつくかでそいつの能力がわかる
このスレの老害はどうでもいいレベルの話を延々語る
どの話題に食いつくかでそいつの能力がわかる
このスレの老害はどうでもいいレベルの話を延々語る
171デフォルトの名無しさん
2020/10/14(水) 17:42:38.61ID:ZV1nncqg >どの話題に食いつくかで
自称数学者の発想ですね判ります
自称数学者の発想ですね判ります
172デフォルトの名無しさん
2020/10/14(水) 17:48:04.39ID:4qg33D8d 131見るとわかるけど
コピペや置換する発想すらない人がstlの利点とか理解できるわけないし
コピペや置換する発想すらない人がstlの利点とか理解できるわけないし
173デフォルトの名無しさん
2020/10/14(水) 17:55:52.69ID:lJFXTbVx >>169
外国の人?
引数の個数が減るとは一言も言ってない。
引数の記述上の長さが減り、分かり易さや間違いにくくなるといっている。
さんざん同じ事を言っているのに、全く違うことを言ったことになってしまっている。
外国の人?
引数の個数が減るとは一言も言ってない。
引数の記述上の長さが減り、分かり易さや間違いにくくなるといっている。
さんざん同じ事を言っているのに、全く違うことを言ったことになってしまっている。
174デフォルトの名無しさん
2020/10/14(水) 18:23:42.32ID:lJFXTbVx 機械翻訳して、長さと個数が混乱して訳されてしまっているのだろうか。
175デフォルトの名無しさん
2020/10/14(水) 18:53:52.73ID:qpMvVLdo176デフォルトの名無しさん
2020/10/14(水) 19:16:14.41ID:fAfIBrSZ >>173
> fill(dim, 2, 98, 0); //引数4個
> 98は個数だと認識して書いた。
間違いにくいとか、間違えやすいとか、
それはおまえさんの個人的なことじゃねえかよ
配列と個数で渡すのが、始点と終点で渡すことよりも
優位だというのは、おまえさん個人が間違いにくいってことか?
言うまでもないが、俺は間違えずにコード示してて
間違えたのはおまえさんだけだぞ
それを一般論として優位ということにはできんだろ
> fill(dim, 2, 98, 0); //引数4個
> 98は個数だと認識して書いた。
間違いにくいとか、間違えやすいとか、
それはおまえさんの個人的なことじゃねえかよ
配列と個数で渡すのが、始点と終点で渡すことよりも
優位だというのは、おまえさん個人が間違いにくいってことか?
言うまでもないが、俺は間違えずにコード示してて
間違えたのはおまえさんだけだぞ
それを一般論として優位ということにはできんだろ
177デフォルトの名無しさん
2020/10/14(水) 19:16:18.40ID:qpMvVLdo この手の配列の話でrangeが出てこないのはなんで?
最近の標準には疎いけど、この手の問題のほとんどがboost::rangeで解決しない?
最近の標準には疎いけど、この手の問題のほとんどがboost::rangeで解決しない?
178デフォルトの名無しさん
2020/10/14(水) 19:18:22.41ID:d5S3+KHs @std::list<Path>* pathListをソートするとします…。
Aどっかのメソッドは…void sort(std::list<Path>* pathList)で受けるとします…。
B内部で以下のようにソートするとします…。
pathList->sort([](Path& o1, Path& o2) {
if(o1.getFileName().compare(o2.getFileName()) < 0) {
return true;
} else {
return false;
}
});
このときに!Aメソッドで…void sort(std::list<Path>*& pathList)
としておかないと…なんか気持ち悪いんですが…
なんで参照の値渡しstd::list<Path>*だけで大丈夫なのかメモリアドレスまでは
僕は把握してません…参照の値渡しだけで行くだろうけど…なぜ大丈夫なのか説明できません…。
誰か…。
Aどっかのメソッドは…void sort(std::list<Path>* pathList)で受けるとします…。
B内部で以下のようにソートするとします…。
pathList->sort([](Path& o1, Path& o2) {
if(o1.getFileName().compare(o2.getFileName()) < 0) {
return true;
} else {
return false;
}
});
このときに!Aメソッドで…void sort(std::list<Path>*& pathList)
としておかないと…なんか気持ち悪いんですが…
なんで参照の値渡しstd::list<Path>*だけで大丈夫なのかメモリアドレスまでは
僕は把握してません…参照の値渡しだけで行くだろうけど…なぜ大丈夫なのか説明できません…。
誰か…。
179デフォルトの名無しさん
2020/10/14(水) 19:19:42.63ID:fAfIBrSZ180デフォルトの名無しさん
2020/10/14(水) 20:10:37.92ID:qrfIlgcS >>178
日本語でどうぞ
日本語でどうぞ
181デフォルトの名無しさん
2020/10/14(水) 20:23:03.09ID:j1TiW1+l 伝統的なバッドノウハウ
「ニワカなやつほど語りたがる」
ID:lJFXTbVxのことね
「ニワカなやつほど語りたがる」
ID:lJFXTbVxのことね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 【27歳会社員】「自慰行為に使うために」コインランドリーの乾燥機から24歳女性の下着など計11点(時価8万2080円相当)盗んだ疑い [nita★]
- 【毎日スクープ】高市の「存立危機事態」発言、午前3時に官僚を叩き起こしてカンペを作らせてたのにガン無視して出たうっかり発言だった [314039747]
- トランプ、G7に代わるcore 5を発表 [805596214]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★7
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【悲報】麻生太郎さん、オムツをしていた。晋さん…ここにいたんだね… [731544683]
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
