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/11(日) 00:17:54.48ID:yrSMEX+0
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
3デフォルトの名無しさん
2020/10/11(日) 07:46:00.50ID:2CDQ3L3B >>1
乙。
乙。
2020/10/11(日) 07:49:37.39ID:eYoRN2yM
5デフォルトの名無しさん
2020/10/11(日) 07:52:39.24ID:2CDQ3L3B などと自画自賛。
6デフォルトの名無しさん
2020/10/11(日) 09:59:16.21ID:kZXFoyze stdafx.h include したら負け
2020/10/11(日) 13:02:31.31ID:sfgrEAk/
>>https://mevius.5ch.net/test/read.cgi/tech/1594528940/914
>普段から、馬鹿な応答が多かったし、
認めましょう
>「自分でコンテナクラス(リストなど)を作れるから天才」
>だとか、男だったら基本中の基本の出来て当たり前の事が出来るだけで天才と言っている
そんな発言はしていませんよ、確かにコンテナを自作する、というのはやったことはありますが、「自分でつくるとイマイチだよね」というのが私の実感です
https://mevius.5ch.net/test/read.cgi/tech/1434079972/33
>如何に周りのレベルが低いかが分かったから。
周り?
私はアマチュアだから、周りにプログラミングをする人はゼロですよ……
>普段から、馬鹿な応答が多かったし、
認めましょう
>「自分でコンテナクラス(リストなど)を作れるから天才」
>だとか、男だったら基本中の基本の出来て当たり前の事が出来るだけで天才と言っている
そんな発言はしていませんよ、確かにコンテナを自作する、というのはやったことはありますが、「自分でつくるとイマイチだよね」というのが私の実感です
https://mevius.5ch.net/test/read.cgi/tech/1434079972/33
>如何に周りのレベルが低いかが分かったから。
周り?
私はアマチュアだから、周りにプログラミングをする人はゼロですよ……
2020/10/11(日) 17:01:01.82ID:pM0zGshh
C++の規格以外の話はスレチ…
2020/10/11(日) 22:05:10.68ID:wjXte93n
規格の話限定だったの?ここ
2020/10/11(日) 23:00:26.64ID:pSezOgnt
>>8
わざわざ馬鹿な引きニート相手に真面目な返答しなくても
わざわざ馬鹿な引きニート相手に真面目な返答しなくても
2020/10/12(月) 02:50:13.21ID:+FLMYxu9
QZ数ヶ月前俺にスルースキルが無いとか偉そうに言ってなかったっけ
C++に関わる話なら個人的には荒れててもいいと思うが、お前のプロフィールなんか誰も興味ないぞ
C++に関わる話なら個人的には荒れててもいいと思うが、お前のプロフィールなんか誰も興味ないぞ
13デフォルトの名無しさん
2020/10/12(月) 09:52:20.31ID:941JO02h >>12
ttps://mevius.5ch.net/test/read.cgi/tech/1601271690/125
ttps://mevius.5ch.net/test/read.cgi/tech/1601271690/125
14デフォルトの名無しさん
2020/10/12(月) 09:57:09.05ID:O4GtI7oq2020/10/12(月) 10:00:39.31ID:rzm6EDrC
批判されたら自演する修正なんてC++関係ない
2020/10/12(月) 12:54:31.37ID:GHsqP2MR
今とあるOSSのライブラリの動きがあやしいのでデバッグしているんだけど
やっぱりいわゆるモダンなc++はデバッグがつらいわ
デバッガで見てもwrapの嵐でデータの中身になかなかたどり着けない
ステップ実行しててもRAIIをはじめ表面上見えない実装がノイズになってわけわかんなくなる
あとデバッグビルドは恐ろしくパフォーマンス落ちる(Cとかと比べてね)
やっぱりいわゆるモダンなc++はデバッグがつらいわ
デバッガで見てもwrapの嵐でデータの中身になかなかたどり着けない
ステップ実行しててもRAIIをはじめ表面上見えない実装がノイズになってわけわかんなくなる
あとデバッグビルドは恐ろしくパフォーマンス落ちる(Cとかと比べてね)
17デフォルトの名無しさん
2020/10/12(月) 14:12:21.06ID:941JO02h C++ より C が良いね
2020/10/12(月) 15:18:22.15ID:Z3Kcjb2S
STLの unique_ptr, shared_ptr, vector, list, forward, move
といった非常に基本的なものもソースを解読するのはとても難しく
strcmpが3行くらいしかなかったのが懐かしい。
それにC++11以降の機能は非常に好みが分かれ、好きな人は好きだが
嫌いな人は反吐が出るほど嫌い。
といった非常に基本的なものもソースを解読するのはとても難しく
strcmpが3行くらいしかなかったのが懐かしい。
それにC++11以降の機能は非常に好みが分かれ、好きな人は好きだが
嫌いな人は反吐が出るほど嫌い。
19デフォルトの名無しさん
2020/10/12(月) 15:23:21.42ID:N0jxybIn Ubuntu20.04でGtkmmでアプリを作っています…ディレクトリとファイル一覧が欲しくて…。
C++17のstd::filesystemを使ったほうがスマートだと思うけど…使えません…。
そんな古い環境ではないと思うんだけど…direntやstatをやればできると思うけど…古いよね?
これカーネルだし…std::filesystemがスマートだと思うんだけど…このUbuntuではまだなの?
-std=c++17のオプションをつけてコンパイルしても駄目だった…。
C++17のstd::filesystemを使ったほうがスマートだと思うけど…使えません…。
そんな古い環境ではないと思うんだけど…direntやstatをやればできると思うけど…古いよね?
これカーネルだし…std::filesystemがスマートだと思うんだけど…このUbuntuではまだなの?
-std=c++17のオプションをつけてコンパイルしても駄目だった…。
20デフォルトの名無しさん
2020/10/12(月) 15:27:01.65ID:O4GtI7oq Ubuntuはgcc9使えたんじゃなかったかな。
gcc8はファイルシステム使うとき、ライブラリをリンクしないといけなかったと思う。
-lstdc++fs
gcc9から必要なかったと思うので、gcc9を使う方をお勧めします。
gcc8はファイルシステム使うとき、ライブラリをリンクしないといけなかったと思う。
-lstdc++fs
gcc9から必要なかったと思うので、gcc9を使う方をお勧めします。
21デフォルトの名無しさん
2020/10/12(月) 16:15:10.34ID:N0jxybIn できました!できました!できましたが…EclipseCDT上で…名称が解決できてない感じ…。
とりあえず…動きました…もう少し調査します…。
とりあえず…動きました…もう少し調査します…。
22デフォルトの名無しさん
2020/10/12(月) 16:27:02.58ID:N0jxybIn 名称も解決できました…使うよ!
23デフォルトの名無しさん
2020/10/12(月) 16:56:02.38ID:941JO02h >>18
速度も落ちてそう
速度も落ちてそう
2020/10/12(月) 19:26:54.38ID:Z3Kcjb2S
2020/10/12(月) 20:04:28.37ID:Zjr2Hxnk
設計者ももっと簡潔に書ける技能を身に付けるべきだと思うけどねん
2020/10/12(月) 20:14:11.80ID:9Fo4KCKO
>>19
-std=c++1zとかstd=gnu++1zじゃなかったっけ
-std=c++1zとかstd=gnu++1zじゃなかったっけ
27デフォルトの名無しさん
2020/10/12(月) 20:50:41.81ID:O4GtI7oq 文芸的プログラミングですね。
28デフォルトの名無しさん
2020/10/13(火) 02:00:34.30ID:y5TdNrxl29はちみつ餃子 ◆8X2XSCHEME
2020/10/13(火) 03:46:05.57ID:jBq+pHZV 汎用的な部品は広い範囲をカバーするわけだから想定すべき状況が多くなるし、
その分だけ相応に複雑になるのは当たり前の話なんだよな。
逆に strcmp が簡潔だったとか言ってもそりゃあ char から成る文字列の比較に
特化していいなら簡潔に出来て当たり前ですよねってだけのことで、
機能が違うものの複雑さを比べようとするのは馬鹿馬鹿しいよ。
その分だけ相応に複雑になるのは当たり前の話なんだよな。
逆に strcmp が簡潔だったとか言ってもそりゃあ char から成る文字列の比較に
特化していいなら簡潔に出来て当たり前ですよねってだけのことで、
機能が違うものの複雑さを比べようとするのは馬鹿馬鹿しいよ。
2020/10/13(火) 07:14:55.86ID:AAkThgLB
・同名の一時変数を使いまわす
・メモリの節約のために早めにデストラクタを呼ぶ
・スコープを小分けにして可読性を上げる
みたいな目的のために中括弧を多用するのってアリですか?
それともスコープじゃなくて関数を分けろってなりますか?
・メモリの節約のために早めにデストラクタを呼ぶ
・スコープを小分けにして可読性を上げる
みたいな目的のために中括弧を多用するのってアリですか?
それともスコープじゃなくて関数を分けろってなりますか?
2020/10/13(火) 09:00:40.68ID:KjGL8AJy
2020/10/13(火) 09:19:57.42ID:2ekPMyol
STLガーSTLガー言ってるやつ
そもそも++でないCでもポインタ引数2個で始点終点渡すのがロクに書けなさそうだね
そもそも++でないCでもポインタ引数2個で始点終点渡すのがロクに書けなさそうだね
33デフォルトの名無しさん
2020/10/13(火) 09:53:49.84ID:f6jDEgc3 STLの凄さがわからない人もいるという。
34デフォルトの名無しさん
2020/10/13(火) 10:50:05.42ID:y5TdNrxl 知ってることの精一杯がポインタのそれなんだな
クスクス
クスクス
2020/10/13(火) 12:20:09.76ID:2ekPMyol
void fill(int first[], int last[], int val)
{
while (first < last) //えー、配列の大小比較って変じゃん
{
first[0] = val; //常にゼロの添え字って気持ち悪いよー
++first; //やだよー、配列を++なんて
}
} //これだから変態どもは・・・まったく
void fill(int first[], int n, int val) //素直にこう書きやがれ
{
for (int i = 0; i < n; i++) //変数が増えることを気にしないのが富豪だ
{
first[i] = val; //配列要素へのアクセスには[]があるべきなんだよ
}
} //知ってることの精一杯がポインタのそれなんだなksks
↑
もうさ、こいつ無理にC++使わなくてよくね?
{
while (first < last) //えー、配列の大小比較って変じゃん
{
first[0] = val; //常にゼロの添え字って気持ち悪いよー
++first; //やだよー、配列を++なんて
}
} //これだから変態どもは・・・まったく
void fill(int first[], int n, int val) //素直にこう書きやがれ
{
for (int i = 0; i < n; i++) //変数が増えることを気にしないのが富豪だ
{
first[i] = val; //配列要素へのアクセスには[]があるべきなんだよ
}
} //知ってることの精一杯がポインタのそれなんだなksks
↑
もうさ、こいつ無理にC++使わなくてよくね?
2020/10/13(火) 12:30:12.68ID:y5TdNrxl
雑魚おつ
3731
2020/10/13(火) 12:48:18.65ID:alJhtdGu いや、あの・・・
STL自体は非常に良く出来てると思うが、俺普段C++(あるいはC++11以降)マンセーSTLマンセーしてる連中は馬鹿にしてるからね・・・w
お前が作ったんちゃうやろと
STL自体は非常に良く出来てると思うが、俺普段C++(あるいはC++11以降)マンセーSTLマンセーしてる連中は馬鹿にしてるからね・・・w
お前が作ったんちゃうやろと
38デフォルトの名無しさん
2020/10/13(火) 12:50:17.06ID:FpFGKRx+ void fill(int *first, int *last, int val)
{
while(first < last) *first++ = val;
}
{
while(first < last) *first++ = val;
}
2020/10/13(火) 12:52:08.93ID:jGpIs/AO
理解は出来ないわけじゃなくSTL流に書くのが汚くて馬鹿みたいに感じるだけだ。
2020/10/13(火) 12:54:03.28ID:jGpIs/AO
配列は処理対象を個数で表現するほうが分かり易いし完結なのに、終端要素で
表そうとするのは単にSTLのとった設計思想の都合でしかないので
馬鹿っぽく感じる。
表そうとするのは単にSTLのとった設計思想の都合でしかないので
馬鹿っぽく感じる。
2020/10/13(火) 12:56:47.00ID:2ekPMyol
>>37
C++11の何が気に入らんの?
C++98でストレス溜まってたところを楽にしてくれてるやん
型指定子autoは同じことを二度も書かされる屈辱から解放してくれるし
range-based-for-statementの見た目からは驚かされる簡潔さなんかクールだろ
俺的にはテンポラリにconstが必須でなくなって痒いところに手が届いた
C++11の何が気に入らんの?
C++98でストレス溜まってたところを楽にしてくれてるやん
型指定子autoは同じことを二度も書かされる屈辱から解放してくれるし
range-based-for-statementの見た目からは驚かされる簡潔さなんかクールだろ
俺的にはテンポラリにconstが必須でなくなって痒いところに手が届いた
2020/10/13(火) 13:17:38.74ID:y5TdNrxl
@
void fill(int first[], int n, int val) //素直にこう書きやがれ
{
for (int i = 0; i < n; i++) //変数が増えることを気にしないのが富豪だ
{
first[i] = val; //配列要素へのアクセスには[]があるべきなんだよ
}
} //知ってることの精一杯がポインタのそれなんだなksks
と
A
void fill(int *first, int *last, int val)
{
while(first < last) *first++ = val;
}
明らかに配列添字明示してる@のほうが無駄が多くて馬鹿っぽいけど
void fill(int first[], int n, int val) //素直にこう書きやがれ
{
for (int i = 0; i < n; i++) //変数が増えることを気にしないのが富豪だ
{
first[i] = val; //配列要素へのアクセスには[]があるべきなんだよ
}
} //知ってることの精一杯がポインタのそれなんだなksks
と
A
void fill(int *first, int *last, int val)
{
while(first < last) *first++ = val;
}
明らかに配列添字明示してる@のほうが無駄が多くて馬鹿っぽいけど
2020/10/13(火) 13:19:51.21ID:2ekPMyol
2020/10/13(火) 13:32:32.38ID:alJhtdGu
>>41
別に気に入らんとか言うとらんよvariadic templates無しの時代はキツかったし(逆に言えばテンプレート以外ではそんなに困らん)
新しいもの使ってる=上級者、だと思ってるような、権威を傘に着てる連中を馬鹿にしてると言ったの
マンセーとかの辺りで察してくれ
別に気に入らんとか言うとらんよvariadic templates無しの時代はキツかったし(逆に言えばテンプレート以外ではそんなに困らん)
新しいもの使ってる=上級者、だと思ってるような、権威を傘に着てる連中を馬鹿にしてると言ったの
マンセーとかの辺りで察してくれ
2020/10/13(火) 13:43:16.33ID:jGpIs/AO
伝統的にはこうで、速度も速い。
void fill(int *ptr, int n, int val)
{
for (int i = 0; i < n; i++) {
*ptr++ = val;
}
}
さらに、以下のように書くほうが速い。
void fill(int *top, int n, int val)
{
int *ptr = top;
for (int i = n; i > 0; --i) {
*ptr++ = val;
}
}
void fill(int *ptr, int n, int val)
{
for (int i = 0; i < n; i++) {
*ptr++ = val;
}
}
さらに、以下のように書くほうが速い。
void fill(int *top, int n, int val)
{
int *ptr = top;
for (int i = n; i > 0; --i) {
*ptr++ = val;
}
}
2020/10/13(火) 13:47:15.59ID:jGpIs/AO
2020/10/13(火) 13:49:44.76ID:2ekPMyol
2020/10/13(火) 13:52:16.91ID:jGpIs/AO
>>46
Ruby, Perl, Python, JS, BASIC のどれでも、配列の処理範囲を示すのに
個数のパラメータを持っている。C言語でも、memcpyやmemcmpは、
memcpy(ptr1, ptr2, num)
memcmp(ptr1, ptr2, num)
であった。
numは、ptr1, ptr2 に共通の要素数なので1,2に対称性があり、とても分かり易いが
STLの流儀に倣って書き直すなら
memcpy(fisrt1, btm1, fisrt2, num)
memcmp(fisrt1, btm1, fisrt2, num)
となってしまうだろう。
この場合、btm1は「1」の終端であるが、「2」とは関連が分かりにくく、
「対称性」が失われている。
だから汚く見える。
Ruby, Perl, Python, JS, BASIC のどれでも、配列の処理範囲を示すのに
個数のパラメータを持っている。C言語でも、memcpyやmemcmpは、
memcpy(ptr1, ptr2, num)
memcmp(ptr1, ptr2, num)
であった。
numは、ptr1, ptr2 に共通の要素数なので1,2に対称性があり、とても分かり易いが
STLの流儀に倣って書き直すなら
memcpy(fisrt1, btm1, fisrt2, num)
memcmp(fisrt1, btm1, fisrt2, num)
となってしまうだろう。
この場合、btm1は「1」の終端であるが、「2」とは関連が分かりにくく、
「対称性」が失われている。
だから汚く見える。
2020/10/13(火) 13:54:08.20ID:2ekPMyol
2020/10/13(火) 13:55:47.45ID:2ekPMyol
>>48
copy(first1, last1, first2) な
copy(first1, last1, first2) な
2020/10/13(火) 13:56:07.20ID:jGpIs/AO
>>45
速度効率をさらに高めたいなら、
void fill(int *top, int n, int val)
{
int *ptr = top;
int *btm = top + num;
while(ptr < btm) *ptr++ = val;
}
と書いても良い。
なので、fill()の内部的な処理効率自体はいくらでも速くできる。
問題は、fill()を使う側の利便性や分かり易さや対称性(=美しさ)。
速度効率をさらに高めたいなら、
void fill(int *top, int n, int val)
{
int *ptr = top;
int *btm = top + num;
while(ptr < btm) *ptr++ = val;
}
と書いても良い。
なので、fill()の内部的な処理効率自体はいくらでも速くできる。
問題は、fill()を使う側の利便性や分かり易さや対称性(=美しさ)。
2020/10/13(火) 14:11:21.12ID:alJhtdGu
>>47
文盲?
文盲?
2020/10/13(火) 14:14:12.35ID:2ekPMyol
>>51
void fill(int* first, int* last, int val)
{
while (first != last) *first++ = val; //nがなきゃtop+nなんて計算そもそもいらん
}
呼び出し側でfill(first, last - first, val)なんてやられた日にゃ引いてから足し直すことになるだろ
void fill(int* first, int* last, int val)
{
while (first != last) *first++ = val; //nがなきゃtop+nなんて計算そもそもいらん
}
呼び出し側でfill(first, last - first, val)なんてやられた日にゃ引いてから足し直すことになるだろ
54デフォルトの名無しさん
2020/10/13(火) 14:19:38.29ID:FpFGKRx+ これはダメなんか遅いんか
void fill(int *first, int *last, int val)
{
while(first != last) *first++ = val;
}
void fill(int *first, int *last, int val)
{
while(first != last) *first++ = val;
}
2020/10/13(火) 14:44:57.22ID:jGpIs/AO
>>53
>呼び出し側でfill(first, last - first, val)なんてやられた日にゃ引いてから足し直すことになるだろ
それは屁理屈と言うか、もしあなたが頭のいい人なのに本気でそう思っているなら
机上の空論というか、実際のアプリ作製の経験が足りないと思われる。
ほとんどの場合、配列の処理範囲はlastではなく個数のnumの方が便利。
lastは割り出すのにワンクッション手間が増えてしまう。
>呼び出し側でfill(first, last - first, val)なんてやられた日にゃ引いてから足し直すことになるだろ
それは屁理屈と言うか、もしあなたが頭のいい人なのに本気でそう思っているなら
机上の空論というか、実際のアプリ作製の経験が足りないと思われる。
ほとんどの場合、配列の処理範囲はlastではなく個数のnumの方が便利。
lastは割り出すのにワンクッション手間が増えてしまう。
56デフォルトの名無しさん
2020/10/13(火) 15:08:27.75ID:f6jDEgc3 初心者がSTLを批判してもダメだろ。
57デフォルトの名無しさん
2020/10/13(火) 15:19:48.82ID:f6jDEgc3 キミたちが言いたいのは、事前に個数がわからないのに関数を呼び出せるのはオカシイって事だろ?
STLは事前に個数がわからないにもかかわらず、関数を呼び出せてしまう。
これはストリームの機能ではないか?
オカシイ!と。
それは、呼び出せる方が汎用性があるんだよ。
全然オカシクない。
STLは事前に個数がわからないにもかかわらず、関数を呼び出せてしまう。
これはストリームの機能ではないか?
オカシイ!と。
それは、呼び出せる方が汎用性があるんだよ。
全然オカシクない。
2020/10/13(火) 16:12:52.22ID:jGpIs/AO
2020/10/13(火) 16:14:05.11ID:jGpIs/AO
2020/10/13(火) 16:14:51.63ID:2fTKv7IK
イテレータぐらいはイディオムとして慣れろや
2020/10/13(火) 16:21:31.28ID:jGpIs/AO
2020/10/13(火) 16:45:48.79ID:2fTKv7IK
>>61
じゃあお前ならどんなAPI設計にするの?
じゃあお前ならどんなAPI設計にするの?
2020/10/13(火) 16:48:01.34ID:2ekPMyol
>>55
標準のcopy関数もロクに知らないくせに・・・いや、これは置いとく
では、おまえさんは配列の終点をどのように渡すんだ?
int main()
{
int dim[100];
fill(dim, /*ここ*/, 0);
}
標準のcopy関数もロクに知らないくせに・・・いや、これは置いとく
では、おまえさんは配列の終点をどのように渡すんだ?
int main()
{
int dim[100];
fill(dim, /*ここ*/, 0);
}
2020/10/13(火) 16:49:01.87ID:zWj2VWPf
同値比較はコストがかかるケースもあるんじゃないですか?
要素数を指定するほうが処理コストが抑えられるような気がします
素人意見ですみません;_;
要素数を指定するほうが処理コストが抑えられるような気がします
素人意見ですみません;_;
65デフォルトの名無しさん
2020/10/13(火) 17:13:32.12ID:FpFGKRx+ 配列だから話がややこしくなるんで
リストだったらどうみても始点終点やろ
インターフェースを合わせるために
配列も始点終点にしただけやろ
リストだったらどうみても始点終点やろ
インターフェースを合わせるために
配列も始点終点にしただけやろ
2020/10/13(火) 17:16:38.67ID:jGpIs/AO
2020/10/13(火) 17:19:05.56ID:jGpIs/AO
しかも問題なのは、vectorの中ほどで追加や削除をしても、終点が自動修正されないこと。
それでは始点と終点で管理している意味が無い。
listならいけることはいけるが。
しかし、結局、vetorとlistの違いを意識しなければバグることになる。
それでは始点と終点で管理している意味が無い。
listならいけることはいけるが。
しかし、結局、vetorとlistの違いを意識しなければバグることになる。
2020/10/13(火) 17:25:01.13ID:2fTKv7IK
2020/10/13(火) 17:27:25.69ID:jGpIs/AO
>>68
アイデアを盗作、剽窃しようとするなよ。
アイデアを盗作、剽窃しようとするなよ。
2020/10/13(火) 17:34:02.61ID:2fTKv7IK
はい雑魚
2020/10/13(火) 17:44:12.19ID:jGpIs/AO
>>70
なんのこっちゃ。
なんのこっちゃ。
2020/10/13(火) 18:08:23.24ID:2ekPMyol
>>66
ズコー(aary
↓こんなコード書いたらバカにしまくってやろうと思ってたのに
#define N 100
int dim[N];
fill(dim, N, 0);
その下をいきやがったw
マジックナンバーって言葉知ってる?
ズコー(aary
↓こんなコード書いたらバカにしまくってやろうと思ってたのに
#define N 100
int dim[N];
fill(dim, N, 0);
その下をいきやがったw
マジックナンバーって言葉知ってる?
73デフォルトの名無しさん
2020/10/13(火) 18:42:42.89ID:f6jDEgc3 レベルが低すぎて議論するだけ無駄なので、この話題はこれでお終いにしてはどうだろか。
2020/10/13(火) 21:22:13.35ID:2ekPMyol
お気の毒に
2020/10/13(火) 22:22:30.85ID:vraeBdjb
よくそのレベルでSTLにケチつけられるなw
2020/10/13(火) 22:53:46.89ID:mhza1+DZ
>>35
×: void fill(int first[], int n, int val) //素直にこう書きやがれ
○: void fill(int first[], const int n, const int val) //素直にこう書きやがれ
×: void fill(int first[], int n, int val) //素直にこう書きやがれ
○: void fill(int first[], const int n, const int val) //素直にこう書きやがれ
2020/10/13(火) 23:00:47.08ID:1+uImEGd
個数不定や個数を数えるのがハイコストでも走査できたり、実在しないアドレスや好きな値でも番兵値として指定できたりするのがlast指定のifのメリットなんじゃね?
マップから取得した項目から走査したいとか、項目ごとにサイズが異なる連続データをメモリから読み出すとか、はたまたインタラクティブにユーザが終了指示するまで繰り返すとか。
個数指定のifもあれば便利だけど、どちらかを選択しないといけないなら、last指定のifだけ存在するほうがダメージが少ない
気がする
マップから取得した項目から走査したいとか、項目ごとにサイズが異なる連続データをメモリから読み出すとか、はたまたインタラクティブにユーザが終了指示するまで繰り返すとか。
個数指定のifもあれば便利だけど、どちらかを選択しないといけないなら、last指定のifだけ存在するほうがダメージが少ない
気がする
2020/10/13(火) 23:07:21.55ID:jGpIs/AO
2020/10/13(火) 23:26:38.01ID:8ZZNtI2L
何がどう証拠として、なのかわけが分からん。詳しく説明してくれ
2020/10/13(火) 23:27:15.76ID:SS1TQwr/
流れ全部読んでないけど上のほうで言ってる人がいるように
> void fill(int *first, int *last, int val)
を見た時点でCやってる人間からしたら関数内部が
> while(first < last) *first++ = val;
こう簡潔になってるだろうと想像しやすくてスッキリしてない?
別に想像する必要は無いんだけど想像してしまうというか
あと開始がポインタで終わりもポインタってのは対称的で良いと思う
> fill(dim, dim + 100, 0);
これも上記の理由により気にならない
このわずかなタイピング量すら気になるんなら
そのソースコードには多分他の問題がある
> void fill(int *first, int *last, int val)
を見た時点でCやってる人間からしたら関数内部が
> while(first < last) *first++ = val;
こう簡潔になってるだろうと想像しやすくてスッキリしてない?
別に想像する必要は無いんだけど想像してしまうというか
あと開始がポインタで終わりもポインタってのは対称的で良いと思う
> fill(dim, dim + 100, 0);
これも上記の理由により気にならない
このわずかなタイピング量すら気になるんなら
そのソースコードには多分他の問題がある
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
ケアレスミス多いな。
ケアレスミス多いな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- トランプ、G7に代わるcore 5を発表 [805596214]
- 上司がアンパンマン体操のリズムで「アンポンタンは君か〜?」って歌うんやが
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- grok制限されたからチャッピーとかジェミニ使ってるけどこいつらおもんなさすぎ
