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を批判してもダメだろ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今年の漢字 [ぐれ★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★4 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- あぼーん
- 今年の漢字は「熊」に決定! 相次ぐクマ被害 去年は「金」 [冬月記者★]
- 【老舗文具メーカー】「生成AIで制作していた」――サクラクレパス、“AI疑惑”ポスターの調査結果を報告 ★2 [ぐれ★]
- 【悲報】ヤフコメ民「今年の漢字は『高』がいいのでは?🤔」株高、異常高温などの理由。高市 [518915984]
- 一人殺したい奴がいる
- __トランプ、G7に代わる「Core 5」構想、米 中 露 印 日をまとめる巨大枠組み、世界秩序の再編につながる可能性 [827565401]
- 残クレタワマン、始まるwwwwwwwwwwwwwwwwwwwwwwwww [329329848]
- 【速報】今年の漢字、「熊」!wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 【画像】35歳まんさん、色気がすごすぎる
