次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1531558382/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part137
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 12c3-4saf)
2018/08/27(月) 16:02:00.94ID:vY3QDx2y0544デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 09:40:52.00ID:GYwTywmv0545デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/18(火) 09:49:04.25ID:k3MAuD5K0 >>531
Yes、OK!
Yes、OK!
546デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/18(火) 09:55:26.47ID:k3MAuD5K0 int ookii=...
int tiisai=...
int V=...
int x = std::max(tiisai,std::min(ookii,V));
ってやると、[min,max]区間内のVが取れたような気がする。
今度C++17で入るクランプがそれ。
int tiisai=...
int V=...
int x = std::max(tiisai,std::min(ookii,V));
ってやると、[min,max]区間内のVが取れたような気がする。
今度C++17で入るクランプがそれ。
547デフォルトの名無しさん (ワッチョイ 57b3-okpm)
2018/09/18(火) 11:57:01.55ID:9q1AFd5B0548デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 12:26:58.02ID:GYwTywmv0 車の事故と同じ
起きるときは起きるなんて言い訳は通用しない
まず起こすな
やっちまったら責任とれ
そういう緊張感がいるってことだ
起きるときは起きるなんて言い訳は通用しない
まず起こすな
やっちまったら責任とれ
そういう緊張感がいるってことだ
549533 (オイコラミネオ MM4f-qteA)
2018/09/18(火) 12:44:39.79ID:TXDNyaJKM ありがとうございます
max関数使わせていただきます
もう一つ別の質問なのですが、
2つのベクターの要素(1000個程度)の比較で、同じi番目の要素の内容差が10以上の要素番号(イテレータ?)を調べたいです
この操作は何回も繰り返すので出来るだけ高速化したいのですがなにか良い方法ありませんかね?
ベクターの要素はint型で内容は大体1000以下の整数です
vec1[100] = 100とvec2[100] = 300
vec1[102] = 100とvec2[122] = 300
なら100, 102のイテレータ(この後そのまま新しくforに投げるので)
max関数使わせていただきます
もう一つ別の質問なのですが、
2つのベクターの要素(1000個程度)の比較で、同じi番目の要素の内容差が10以上の要素番号(イテレータ?)を調べたいです
この操作は何回も繰り返すので出来るだけ高速化したいのですがなにか良い方法ありませんかね?
ベクターの要素はint型で内容は大体1000以下の整数です
vec1[100] = 100とvec2[100] = 300
vec1[102] = 100とvec2[122] = 300
なら100, 102のイテレータ(この後そのまま新しくforに投げるので)
550デフォルトの名無しさん (アークセー Sx8b-Jnas)
2018/09/18(火) 13:14:20.96ID:l12yg0eyx551デフォルトの名無しさん (ブーイモ MM9b-ck2F)
2018/09/18(火) 14:20:03.27ID:Gab8FMClM >>549
1000個を例えば4コアで250個ずつ並列化してさらにforの中でn個ずつ比較するとかかな…
intelは
_mm_cmpgt_epi16
armは
vcgt_s16
とかあるみたいだけど
1000個を例えば4コアで250個ずつ並列化してさらにforの中でn個ずつ比較するとかかな…
intelは
_mm_cmpgt_epi16
armは
vcgt_s16
とかあるみたいだけど
552デフォルトの名無しさん (ワントンキン MM7f-ahc+)
2018/09/18(火) 15:33:22.77ID:UQgXz1AkM 普通MPIじゃね?
553はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/18(火) 16:41:03.37ID:CgLDhfQ00 >>549
新しく for に投げるっていうのがよくわからんのだが、
やりたいことをコードで (C++17 で導入された構造化束縛を使って) 表すと
for (const int& [element1, element2]: extract_if_big_difference(vec1, vec2)) { ほにゃらら }
みたいに書ける関数 extract_if_big_difference が定義できるといいなぁという感じ?
こうだとしたら、並列化するのは難しい気がするぞ。
新しく for に投げるっていうのがよくわからんのだが、
やりたいことをコードで (C++17 で導入された構造化束縛を使って) 表すと
for (const int& [element1, element2]: extract_if_big_difference(vec1, vec2)) { ほにゃらら }
みたいに書ける関数 extract_if_big_difference が定義できるといいなぁという感じ?
こうだとしたら、並列化するのは難しい気がするぞ。
554デフォルトの名無しさん (アークセー Sx8b-Jnas)
2018/09/18(火) 16:42:40.86ID:l12yg0eyx OpenCLでベクトル演算すれば速いんじゃね?
555デフォルトの名無しさん (ワッチョイ 9f12-9b2l)
2018/09/18(火) 16:58:21.90ID:Zf2s67R20 こんなのだと速そうな気がする
vec3 = vec1 - vec2;
filter(vec3, 10, index);
void filter(const vector vec3, const int limit, int index[]){
int j=0;
for(int i=0; i<vec3.size(); i++){
if(vec3[i] >= limit){
index[j++] = i;
}else if(vec3[i] <= -limit){
index[j++] = i;
}
}
index[j] = -1;
return;
}
vec3 = vec1 - vec2;
filter(vec3, 10, index);
void filter(const vector vec3, const int limit, int index[]){
int j=0;
for(int i=0; i<vec3.size(); i++){
if(vec3[i] >= limit){
index[j++] = i;
}else if(vec3[i] <= -limit){
index[j++] = i;
}
}
index[j] = -1;
return;
}
556デフォルトの名無しさん (スップ Sd3f-x7Ox)
2018/09/18(火) 17:05:52.46ID:ZX8OqlLQd データが多いならざっくり N (2〜8)分割して OpenMP とかで並列処理するのがいいよ
数百ミリ秒以上かかるなら他のコアを遊ばせておくのはもったいない
各分割の結果は独立して保持して後で統合する
数百ミリ秒以上かかるなら他のコアを遊ばせておくのはもったいない
各分割の結果は独立して保持して後で統合する
557デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 17:06:36.21ID:GYwTywmv0 >>549
vectorじゃなくvalarrayだが。。。
int main()
{
int const n = 10; //おまえさんのリクは 1000 だったな
//このへん前置きは置いといて
mt19937 eng;
random_device dev;
eng.seed(dev());
uniform_int_distribution<int> dis(-20, 20);
auto rnd = [&eng, &dis]() { return dis(eng); };
auto print = [](auto& ct) { for(auto& x : ct) cout << x << '\t'; cout << endl; };
valarray<int> vec1(n);
generate(begin(vec1), end(vec1), rnd);
print(vec1);
valarray<int> vec2(n);
generate(begin(vec2), end(vec2), rnd);
print(vec2);
cout << endl;
//ここが本題
valarray<bool> mask = abs(vec1 - vec2) >= 10;
vec1[!mask] = 0;
vec2[!mask] = 0;
print(vec1);
print(vec2);
}
差が10以上のところを探して何か処理ならこっちのが楽だべ
vectorじゃなくvalarrayだが。。。
int main()
{
int const n = 10; //おまえさんのリクは 1000 だったな
//このへん前置きは置いといて
mt19937 eng;
random_device dev;
eng.seed(dev());
uniform_int_distribution<int> dis(-20, 20);
auto rnd = [&eng, &dis]() { return dis(eng); };
auto print = [](auto& ct) { for(auto& x : ct) cout << x << '\t'; cout << endl; };
valarray<int> vec1(n);
generate(begin(vec1), end(vec1), rnd);
print(vec1);
valarray<int> vec2(n);
generate(begin(vec2), end(vec2), rnd);
print(vec2);
cout << endl;
//ここが本題
valarray<bool> mask = abs(vec1 - vec2) >= 10;
vec1[!mask] = 0;
vec2[!mask] = 0;
print(vec1);
print(vec2);
}
差が10以上のところを探して何か処理ならこっちのが楽だべ
558デフォルトの名無しさん (アウアウウー Sa1b-EMso)
2018/09/18(火) 18:11:51.89ID:H2d9f0sTa559デフォルトの名無しさん (オッペケ Sr8b-+tGE)
2018/09/18(火) 18:32:34.48ID:RR2nvfojr boost の multi_array ってさ、添字の入れ替えってできる?
例えば要素 a[i][j][k] を a[k][i][j] に、全ての i, j, k について入れ替える操作
自分で実装しなきゃ駄目?
例えば要素 a[i][j][k] を a[k][i][j] に、全ての i, j, k について入れ替える操作
自分で実装しなきゃ駄目?
560デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/18(火) 23:03:47.37ID:oE0uJFU60 boostみたいなインチキくさいライブラリは使ったことないが
オレだったらイチイチそんなムダな入れ替えが本当に必要なのかと
まずそこを疑う
オレだったらイチイチそんなムダな入れ替えが本当に必要なのかと
まずそこを疑う
561デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/18(火) 23:14:12.21ID:yg1A1NBg0 行列でそんな演算あったような
562デフォルトの名無しさん (オッペケ Sr8b-+tGE)
2018/09/18(火) 23:30:40.91ID:GKhblNvIr563デフォルトの名無しさん (ワッチョイ ff5b-ck2F)
2018/09/18(火) 23:35:47.30ID:Re9liTgW0 できた!
template<typename T>
class MyMatrix3D : Matrix3D {
...
virtual T get(size_t i, size_t j, size_t k) {
return get(k, i, j);
}
...
};
template<typename T>
class MyMatrix3D : Matrix3D {
...
virtual T get(size_t i, size_t j, size_t k) {
return get(k, i, j);
}
...
};
564デフォルトの名無しさん (スッップ Sdbf-x7Ox)
2018/09/18(火) 23:43:07.71ID:G/V6WyhFd stack overflow
565デフォルトの名無しさん (ワッチョイ ff5b-DF3W)
2018/09/19(水) 00:26:11.52ID:McwJY1yY0 わ、わざとだから!
566デフォルトの名無しさん (ワッチョイ 9fbd-Tlrf)
2018/09/19(水) 00:33:47.86ID:dEko0zDA0 boostとか漏れも使ったことないわ(゚∀゚)人(゚∀゚)ナカーマ
567デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/19(水) 04:24:37.15ID:2wyJ7zTj0 boostはbjamが糞すぎて入れるのめんどくさくなっちゃった
568533,549 (オイコラミネオ MMc9-TpIz)
2018/09/20(木) 03:07:15.61ID:fZtZJGAwM 遅くなってすみません
処理が重くなったのは別の部分のせいでした…
Python的考えで5桁くらいインデントしてたので勝手に遅いと思ってましたが普通に高速でした
お騒がせしました
処理が重くなったのは別の部分のせいでした…
Python的考えで5桁くらいインデントしてたので勝手に遅いと思ってましたが普通に高速でした
お騒がせしました
569デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/20(木) 13:40:29.54ID:CPfoYuVJ0570デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/20(木) 21:36:12.15ID:zLqp8E230 低学歴知恵遅れなら
1回ループするのに1分かかるようなコードを書きかねない
1回ループするのに1分かかるようなコードを書きかねない
571デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/21(金) 00:16:00.80ID:4kzBlK6i0 再帰使ってみたが1分かからんかった
ゆ、許された…
ttps://ideone.com/kHFd61
ゆ、許された…
ttps://ideone.com/kHFd61
572デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/21(金) 00:27:26.94ID:4kzBlK6i0 1分の壁を破るには、何度も何度もそれとわからずに同じ計算をするようなアルゴリズムにしないとだめだなあ…
573デフォルトの名無しさん (ワッチョイ 01ea-nsub)
2018/09/21(金) 03:21:51.90ID:xr3UMDDx0 boostをVS2017に入れられない
574デフォルトの名無しさん (JP 0Hd6-Y82R)
2018/09/21(金) 13:11:38.33ID:JwHgudh+H 関数A,B、C、D、EがあってAの中でBを呼んで、Bの中でCを……
って構造があって、例えばEでエラーが出るとします。大本のAにそれを伝えてエラーにしたいんですけどどうしたらいいでしょう
BCDEの戻り値全部boolにしてfalseを返すくらいしか思いつかないです
って構造があって、例えばEでエラーが出るとします。大本のAにそれを伝えてエラーにしたいんですけどどうしたらいいでしょう
BCDEの戻り値全部boolにしてfalseを返すくらいしか思いつかないです
575デフォルトの名無しさん (ワッチョイ cd8a-TJ0W)
2018/09/21(金) 13:20:30.45ID:EQpNFWj/0576はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 13:40:44.63ID:FzfC+eZt0 書く分には例外を投げるのが楽じゃないの。
関数 B, C, D ではそのエラーについて忘れておくことが出来るので。
関数 B, C, D ではそのエラーについて忘れておくことが出来るので。
577デフォルトの名無しさん (ワッチョイ 4234-CvAF)
2018/09/21(金) 13:41:36.51ID:IFsUWHdO0 >>574
例外を投げてキャッチさせる
例外を投げてキャッチさせる
578デフォルトの名無しさん (ワッチョイ c212-yqSl)
2018/09/21(金) 14:25:47.49ID:wDeX8uPc0 例外はGOTOに迫りつつある
579デフォルトの名無しさん (ワッチョイ 6202-coYL)
2018/09/21(金) 14:34:59.25ID:lJw3kOTN0 >>574
典型的な例外の出番だ
void E() { throw std::runtime_error("error at E()"); }
void D() { E(); }
void C() { D(); }
void B() { C(); }
void A() { try { B(); } catch(std::exception& err) { std::cerr << err.what(); } }
典型的な例外の出番だ
void E() { throw std::runtime_error("error at E()"); }
void D() { E(); }
void C() { D(); }
void B() { C(); }
void A() { try { B(); } catch(std::exception& err) { std::cerr << err.what(); } }
580デフォルトの名無しさん (JP 0Hd6-Y82R)
2018/09/21(金) 14:47:07.50ID:JwHgudh+H 皆様ありがとうございました。
別関数からのまでcatchできるとは知りませんでした。>>574を参考にしつつ書いてみようかと思います。
ファイル読み込みのときはあんま例外使わないなんて記述見たんですけど別に書いても大丈夫ですよね
別関数からのまでcatchできるとは知りませんでした。>>574を参考にしつつ書いてみようかと思います。
ファイル読み込みのときはあんま例外使わないなんて記述見たんですけど別に書いても大丈夫ですよね
581デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 16:31:17.28ID:vcIlO6Gbr スッゲェ素人なんだけどよ、他人が作ったクラスに自作関数を付け加えたいときってどうすんの?
(例えば、行列クラスに特異値分解する関数を付け加える等)
継承ってやつを勉強して使うだけ?
C++ の言語仕様と常識を勉強したいという意味でもあるので、「その他人のコードを直接編集せよ」ってのはナシで頼む
(例えば、行列クラスに特異値分解する関数を付け加える等)
継承ってやつを勉強して使うだけ?
C++ の言語仕様と常識を勉強したいという意味でもあるので、「その他人のコードを直接編集せよ」ってのはナシで頼む
582デフォルトの名無しさん (ワッチョイ 4223-tHrl)
2018/09/21(金) 16:50:36.52ID:K+jLUYtn0 >>581
機能を追加するために継承使うのは設計的によくないよ
機能を追加するために継承使うのは設計的によくないよ
583デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 17:01:37.16ID:pko5dpD3r >>582
どうするべき?
どうするべき?
584デフォルトの名無しさん (アークセー Sx71-vwf2)
2018/09/21(金) 17:06:42.97ID:OnuHA6YMx585デフォルトの名無しさん (ワッチョイ 4223-tHrl)
2018/09/21(金) 17:15:33.49ID:K+jLUYtn0586デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 17:45:50.45ID:nytN4gJ8r587はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 18:21:14.81ID:FzfC+eZt0 >>586
なんでもかんでもメンバ関数として持たせるのはダサいというのが近年の風潮。
設計方針にもよるんだけど、機能をちょっと増やすたびに新しい型を作るのも馬鹿馬鹿しいだろう。
単なる関数として作ればそれでよいはずのことにクラスの依存関係まで出てくるの、ホントに良くない。
なんでもかんでもメンバ関数として持たせるのはダサいというのが近年の風潮。
設計方針にもよるんだけど、機能をちょっと増やすたびに新しい型を作るのも馬鹿馬鹿しいだろう。
単なる関数として作ればそれでよいはずのことにクラスの依存関係まで出てくるの、ホントに良くない。
588デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 18:35:46.91ID:nikK7GUa0589デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 18:37:09.46ID:MaoTi4980 >>587
完全に同意。
クラスの数が星の数ほどあるプロジェクトで、継承してメソッド一個追加してるだけとかの経年劣化したソース見たら目眩がするわ。
オブジェクト指向の初期啓蒙として「既存のクラスは変更するな」「機能追加は継承使え」って言ってた人を恨むわ。
完全に同意。
クラスの数が星の数ほどあるプロジェクトで、継承してメソッド一個追加してるだけとかの経年劣化したソース見たら目眩がするわ。
オブジェクト指向の初期啓蒙として「既存のクラスは変更するな」「機能追加は継承使え」って言ってた人を恨むわ。
590デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 18:40:06.68ID:MaoTi4980591デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 18:53:16.27ID:nVnA1Sbpr >>588-590
では特異値分解、スライシング、掛け算、足し算、エトセトラ……、という大規模な機能追加を既存のクラスに対して行ないたい場合はどのようにするべきでしょうか
では特異値分解、スライシング、掛け算、足し算、エトセトラ……、という大規模な機能追加を既存のクラスに対して行ないたい場合はどのようにするべきでしょうか
592デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 19:06:55.02ID:MaoTi4980593デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/21(金) 19:18:19.30ID:scCYqhjF0 他人が作ったクラスで勝手にいじれないんでしょ?
protectedやvirtualなメンバがあって、それを使って色々するなら当然継承すればいいけど
そうじゃない継承される前提で作られたクラスじゃないなら継承はオススメできんなあ
svd(m)をm.svd()って書きたいためだけに継承の山のようなトラップ抱え込むのは割に合わないと思うよ
どうせ親クラスのprivateはいじれないんだし
protectedやvirtualなメンバがあって、それを使って色々するなら当然継承すればいいけど
そうじゃない継承される前提で作られたクラスじゃないなら継承はオススメできんなあ
svd(m)をm.svd()って書きたいためだけに継承の山のようなトラップ抱え込むのは割に合わないと思うよ
どうせ親クラスのprivateはいじれないんだし
594デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/21(金) 19:20:28.05ID:wzHnJ4yt0 unified call syntax 甦れ。
595デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 19:24:14.64ID:nikK7GUa0 >>591
使ってるのはuBLASだっけ?調べてないのでわからんけど・・・・
継承を前提にしたクラス(デストラクタがvirtualであり、実際継承してみても使える)なら継承もアリっちゃアリだとは思う
(責任は負わんw あくまで勉強目的でやってみるのはいいと思う)
ただ、特異値分解は知らんのでわからんけど、一般に演算クラスの機能追加は
>>587の言う通り、単純にそのクラスを受け取るグローバル関数にする方がいい
特に
>掛け算、足し算
こんなのはまさにメンバ関数にしなくても、グローバルに演算子オーバーロードを定義すれば済む
(メンバに書いてもグローバルに書いても利用者側はA * Bって書ける
あとv1.dot(v2)よりdot(v1, v2)のがわかりやすいと思うけどね
使ってるのはuBLASだっけ?調べてないのでわからんけど・・・・
継承を前提にしたクラス(デストラクタがvirtualであり、実際継承してみても使える)なら継承もアリっちゃアリだとは思う
(責任は負わんw あくまで勉強目的でやってみるのはいいと思う)
ただ、特異値分解は知らんのでわからんけど、一般に演算クラスの機能追加は
>>587の言う通り、単純にそのクラスを受け取るグローバル関数にする方がいい
特に
>掛け算、足し算
こんなのはまさにメンバ関数にしなくても、グローバルに演算子オーバーロードを定義すれば済む
(メンバに書いてもグローバルに書いても利用者側はA * Bって書ける
あとv1.dot(v2)よりdot(v1, v2)のがわかりやすいと思うけどね
596デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 19:48:50.66ID:MaoTi4980 >>595
完全に同意。
完全に同意。
597デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 19:58:47.83ID:nVnA1Sbpr >>592-596
なるほど。
普通に関数にするのが、必要十分さの面で、良さそうですね。
頭の中にあったのは、自分で作った関数群が全て○○というクラスに対して使用することを想定している、と明示したかったということです。
グローバル関数の用途を明らかにする方法として、メンバ関数化すれば良いのかな、と思いました。
メンバ関数にはしないということにした場合、上のことを実現するにはどうするべきでしょうか。
コメントやノートに書くくらいしか思い付きませんが、それで良いのかな
なるほど。
普通に関数にするのが、必要十分さの面で、良さそうですね。
頭の中にあったのは、自分で作った関数群が全て○○というクラスに対して使用することを想定している、と明示したかったということです。
グローバル関数の用途を明らかにする方法として、メンバ関数化すれば良いのかな、と思いました。
メンバ関数にはしないということにした場合、上のことを実現するにはどうするべきでしょうか。
コメントやノートに書くくらいしか思い付きませんが、それで良いのかな
598デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/21(金) 20:09:39.68ID:scCYqhjF0 引数の型が○○やconst ○○&になるでしょ
それ以上のなにが欲しいの?
それ以上のなにが欲しいの?
599デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 20:10:46.02ID:nikK7GUa0 そういえばBLASとは書いてたけどuBLASとは書いてなかったな
いずれにしても、その扱いたいクラスを受け取る関数だから見たらわかるっしょ
違う型を渡したらエラーになる
いずれにしても、その扱いたいクラスを受け取る関数だから見たらわかるっしょ
違う型を渡したらエラーになる
600デフォルトの名無しさん (ブーイモ MMb6-WirJ)
2018/09/21(金) 20:12:28.34ID:+2gqfJ3dM >>597
どうでもいいけど最初と大分キャラ変わってるぞw
どうでもいいけど最初と大分キャラ変わってるぞw
601デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 20:17:41.28ID:nVnA1Sbpr >>598-599
わかりました。
確かに型を見たら自明ですね。
結局は
> svd(m)をm.svd()って書きたいためだけ
だったのかも知れません。
なんせそういう書き方はいかにも「ぽい」ですから。
ありがとうございます。
わかりました。
確かに型を見たら自明ですね。
結局は
> svd(m)をm.svd()って書きたいためだけ
だったのかも知れません。
なんせそういう書き方はいかにも「ぽい」ですから。
ありがとうございます。
602デフォルトの名無しさん (スプッッ Sdc2-m97R)
2018/09/21(金) 20:19:42.40ID:KRvbJL35d603はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 20:43:37.20ID:FzfC+eZt0604デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 21:06:19.19ID:nikK7GUa0 ・・・・・俺が何を批判したかわかってないな
「ダサい」とか「風潮」じゃなくて、何故それが好ましいか、好ましくないか、
質問者のケースに合った説明をしろっつってんの
なんで当時の「テンプレートで継承の代用」の例を出したかわからんか?
代用にはなり得ないんだよ原理的に
実行時のポリモーフィズムをテンプレートで実現できるのか?
ユーザーの入力やファイルの内容に従って実行時に作るオブジェクトを変え、かつ
それを1つの型でまとめられるのか??
type erasure(boost::any含む)とかswitchとかif使う、とかは無しでな
自分の頭でその方法が合っているか合っていないか考えずに
流行とかに流された結果が、↑で挙げたソレなんだよ
C++潰したいのかよ
「ダサい」とか「風潮」じゃなくて、何故それが好ましいか、好ましくないか、
質問者のケースに合った説明をしろっつってんの
なんで当時の「テンプレートで継承の代用」の例を出したかわからんか?
代用にはなり得ないんだよ原理的に
実行時のポリモーフィズムをテンプレートで実現できるのか?
ユーザーの入力やファイルの内容に従って実行時に作るオブジェクトを変え、かつ
それを1つの型でまとめられるのか??
type erasure(boost::any含む)とかswitchとかif使う、とかは無しでな
自分の頭でその方法が合っているか合っていないか考えずに
流行とかに流された結果が、↑で挙げたソレなんだよ
C++潰したいのかよ
605デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 21:35:12.47ID:MaoTi4980 >>604
これも横からだが、C++はもう役割を終えて衰退機だと思う。
今から積極的にC++を採用する分野は限られていて、使えるor使おうと思うエンジニアの絶対数が減るってことは衰退と同義だと思う。
いろんな言語のエッセンスを学べるので悪い言語でないとは思うけど、誰かが言った通り習得のコストに見合ったメリットがない。
盛者必衰。
これも横からだが、C++はもう役割を終えて衰退機だと思う。
今から積極的にC++を採用する分野は限られていて、使えるor使おうと思うエンジニアの絶対数が減るってことは衰退と同義だと思う。
いろんな言語のエッセンスを学べるので悪い言語でないとは思うけど、誰かが言った通り習得のコストに見合ったメリットがない。
盛者必衰。
606はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 21:55:31.46ID:FzfC+eZt0607デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 22:01:19.22ID:nikK7GUa0 >>606
ああすまん、確かに言葉尻に反応したところはあったな
でも「風潮」とか「ダサい」って蛇足だよな?w
ダサいって言いたかっただけやろ?
>違う機能が違う能力を持つのは当たり前だろ?
お前>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
テンプレートを盲信してるようだから説明したんだが。
継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
とか言ってる辺りからも、オブジェクト指向は過去のものだから継承も過去のものなんだぜ、とか
抜かしたかったのがわかる
マルチパラダイムの意味わかってる?
ああすまん、確かに言葉尻に反応したところはあったな
でも「風潮」とか「ダサい」って蛇足だよな?w
ダサいって言いたかっただけやろ?
>違う機能が違う能力を持つのは当たり前だろ?
お前>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
テンプレートを盲信してるようだから説明したんだが。
継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
とか言ってる辺りからも、オブジェクト指向は過去のものだから継承も過去のものなんだぜ、とか
抜かしたかったのがわかる
マルチパラダイムの意味わかってる?
608デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/21(金) 22:15:11.22ID:M9VunTBo0 継承をテンプレートで置き換えるって失敗したというよりもすでに当たり前になっただけでは
むしろそっちはそっちで発展してるし、動的でなくてもいいケースは確かに存在している
むしろそっちはそっちで発展してるし、動的でなくてもいいケースは確かに存在している
609デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 22:20:50.92ID:nikK7GUa0610はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 22:46:33.24ID:FzfC+eZt0 >>607
> 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
違うものは違う。 代用品ではない。
継承構造の代用品としてテンプレートを使えというのではなく、
テンプレートも前提のひとつとしたデザインにしろと言ってんの。
「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
> 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
違うものは違う。 代用品ではない。
継承構造の代用品としてテンプレートを使えというのではなく、
テンプレートも前提のひとつとしたデザインにしろと言ってんの。
「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
611デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 23:01:04.77ID:nikK7GUa0 >>610
>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
>それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。
って言ってるよな
「かつて上手くいかなかった」って、
俺の「かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった」
のことだろ?言い逃れしてんじゃねーよ
ちなみに継承をテンプレートで代用、を挙げたのは、それに初心者が惑わされたからだ
ただのテクニックの紹介ではなく「C++の継承は汚い」みたいな暴言を伴ってな
お前が「ダサい」とか「風潮」とか、自分がドヤりたいがために選ぶ言葉と同じだよ
>「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
質問者の「関数追加」の方法についてはお前の意見に賛同してるだろうが
>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
>それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。
って言ってるよな
「かつて上手くいかなかった」って、
俺の「かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった」
のことだろ?言い逃れしてんじゃねーよ
ちなみに継承をテンプレートで代用、を挙げたのは、それに初心者が惑わされたからだ
ただのテクニックの紹介ではなく「C++の継承は汚い」みたいな暴言を伴ってな
お前が「ダサい」とか「風潮」とか、自分がドヤりたいがために選ぶ言葉と同じだよ
>「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
質問者の「関数追加」の方法についてはお前の意見に賛同してるだろうが
612デフォルトの名無しさん (ワッチョイ f107-Yi59)
2018/09/21(金) 23:02:28.75ID:ZQgI79kj0 質問者を放置してドヤ顔で語るオタクたち
613デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 23:10:39.91ID:nikK7GUa0 あ、ついでに言うと
>言語そのものとしてのサポートが不充分だった
ねーよ
C++98〜03でも十分メタプログラミング出来てたぞ(11から確かに幅は広がったが
STLしかりModern C++ Designの著者のLokiしかり
Boostだって当時からあったからな
>言語そのものとしてのサポートが不充分だった
ねーよ
C++98〜03でも十分メタプログラミング出来てたぞ(11から確かに幅は広がったが
STLしかりModern C++ Designの著者のLokiしかり
Boostだって当時からあったからな
614デフォルトの名無しさん (ワッチョイ 42b3-GHk6)
2018/09/21(金) 23:26:46.84ID:wfTNvghC0615デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/21(金) 23:30:11.36ID:wzHnJ4yt0 FixedC++であるRustに期待はしているが・・・。
616はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 23:41:33.16ID:FzfC+eZt0 >>611
なんでその結論に納得できるのに前提に色々言ってんだ?
テンプレートについてはそっちが言い始めたことで、別の話題だろ?
代用という言葉の使い方がちょっとずれてるだけじゃないの。
そのまま置き換えれるかという意味では代用できないし、
継承でなんとかしてたデザインをテンプレートを活用したデザインに置き換えられる (こともある)
という意味では代用ともいえる。
言葉については、「ダサい」はともかく、「風潮」に何か問題あるか? それは全くわからんな。
デザインの風潮というものは間違いなくある。
なんでその結論に納得できるのに前提に色々言ってんだ?
テンプレートについてはそっちが言い始めたことで、別の話題だろ?
代用という言葉の使い方がちょっとずれてるだけじゃないの。
そのまま置き換えれるかという意味では代用できないし、
継承でなんとかしてたデザインをテンプレートを活用したデザインに置き換えられる (こともある)
という意味では代用ともいえる。
言葉については、「ダサい」はともかく、「風潮」に何か問題あるか? それは全くわからんな。
デザインの風潮というものは間違いなくある。
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 00:00:10.67ID:cynlNZMd0 >>613
無理無理。
今だってろくでもない回りくどい仕組みでどうにかこうにか
型の制約を表現できてるってだけだもの。
初心者にそれを元にデザインさせるのは無理。
型の制約についての知見とは別に C++ の言語機能が足りてない。
無理無理。
今だってろくでもない回りくどい仕組みでどうにかこうにか
型の制約を表現できてるってだけだもの。
初心者にそれを元にデザインさせるのは無理。
型の制約についての知見とは別に C++ の言語機能が足りてない。
618デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 00:04:20.29ID:0je8S2eS0 >テンプレートについてはそっちが言い始めたことで
ダサいとかイケてるとか風潮とかで設計を語るからだよ
お前の説明はだいぶ甘い、自分でよくわかってないものを押し付けてないか?
そういう傾向を指摘されたって気づいてるだろ?
自分のコーディングの経験が足りてないゆえに、はっきり断言できないから風潮とか出てくるんだろ?
さっさと謝ってりゃここまで言ってないんだがな
>デザインの風潮というものは間違いなくある。
そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
>>617
何の話してんの?コンセプト?w
なんで初心者がまだ導入されてないコンセプト前提の設計しなきゃならないの?馬鹿なの?
コンセプト入ったら実行時のポリモーフィズムをテンプレートで出来るの????wwwwww
ダサいとかイケてるとか風潮とかで設計を語るからだよ
お前の説明はだいぶ甘い、自分でよくわかってないものを押し付けてないか?
そういう傾向を指摘されたって気づいてるだろ?
自分のコーディングの経験が足りてないゆえに、はっきり断言できないから風潮とか出てくるんだろ?
さっさと謝ってりゃここまで言ってないんだがな
>デザインの風潮というものは間違いなくある。
そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
>>617
何の話してんの?コンセプト?w
なんで初心者がまだ導入されてないコンセプト前提の設計しなきゃならないの?馬鹿なの?
コンセプト入ったら実行時のポリモーフィズムをテンプレートで出来るの????wwwwww
619デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/22(土) 00:11:49.56ID:vYximTvP0 最初はもてはやされたけど、みんな知ってる前提になったら特に触れられもしなくなった
風潮ってこいうのだろw
風潮ってこいうのだろw
620デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 00:12:42.81ID:0je8S2eS0 すまんちょっと熱くなりすぎた
論破されたことに気付かないアホ(あるいは謝ったら死ぬ病)相手にするとキリが無いわ・・・・
もうやめとく
論破されたことに気付かないアホ(あるいは謝ったら死ぬ病)相手にするとキリが無いわ・・・・
もうやめとく
621デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/22(土) 01:40:05.82ID:3xdfFsZb0 権限の委譲というと良いものを与えているイメージだが
UML用語の委譲はどうみても仕事の丸投げとかたらい回しな印象であるイメージ
な気がする
UML用語の委譲はどうみても仕事の丸投げとかたらい回しな印象であるイメージ
な気がする
622572 (ワッチョイ 42bd-LgAV)
2018/09/22(土) 02:14:06.30ID:3xdfFsZb0 昨日のプログラムを改良したったwwwww
ttps://ideone.com/hkeEp0
データ数N=300のときCore i7-860 (2.8 GHz)で8秒かかる。idoneのやつでも5秒。
N=1000だと宇宙の終わりまでかかる予定。
これで漏れも低学歴知恵遅れに晴れて仲間入りDA☆NE!
ttps://ideone.com/hkeEp0
データ数N=300のときCore i7-860 (2.8 GHz)で8秒かかる。idoneのやつでも5秒。
N=1000だと宇宙の終わりまでかかる予定。
これで漏れも低学歴知恵遅れに晴れて仲間入りDA☆NE!
623デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/22(土) 03:45:26.27ID:57qyxfm80 https://ideone.com/CYkJfe
高速化する話なのか低速化する話なのかは分からんけど、素直に書いたらこんな感じかなぁとか。
終わった話題かもしれんけど。
どうしても高速化したいんやったら、関数を並列実行できるようにして、
https://cpprefjp.github.io/reference/thread/thread/hardware_concurrency.html
上記の数で分割実行かなぁとか。
フューチャー投げるのはそんなに難しくないと思う。std::async使えば簡単だし。
高速化する話なのか低速化する話なのかは分からんけど、素直に書いたらこんな感じかなぁとか。
終わった話題かもしれんけど。
どうしても高速化したいんやったら、関数を並列実行できるようにして、
https://cpprefjp.github.io/reference/thread/thread/hardware_concurrency.html
上記の数で分割実行かなぁとか。
フューチャー投げるのはそんなに難しくないと思う。std::async使えば簡単だし。
624デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/22(土) 03:54:48.35ID:57qyxfm80 気が付いたら、absがテンプレート関数じゃなくなってた。
625デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/22(土) 07:17:07.67ID:ieaomBGwa constexprな関数はコンパイル時でも実行時でも使えるが、定数になる文脈とならない文脈で関数を使い分けしたい。そういう使い分けは可能だろうか?
例えばsqrt関数はconstexprになっていないが、
アルゴリズム的には自作関数でconstexpr対応可能
ただし速度的にはcmathのsqrtの方が何倍も早いのでconstexprでない文脈の時にはcmathのsqrtを呼び出したいのです。
例えばsqrt関数はconstexprになっていないが、
アルゴリズム的には自作関数でconstexpr対応可能
ただし速度的にはcmathのsqrtの方が何倍も早いのでconstexprでない文脈の時にはcmathのsqrtを呼び出したいのです。
626デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 07:58:27.87ID:0je8S2eS0 is_constexprで検索したらそれっぽいアイデアは出てくるけど
627デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/22(土) 09:39:59.40ID:qCwQCuMG0628はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 12:24:16.36ID:cynlNZMd0629デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:05:08.82ID:PHVB0Lj2M templateで躓いてるんですけど皆どうやってテンプレートを勉強したんですか?
630デフォルトの名無しさん (ワッチョイ c17f-coYL)
2018/09/22(土) 13:06:49.63ID:sAfENX6G0 車輪の再発明
631デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/22(土) 13:16:51.91ID:EBMrcrP1a 何を悩んでる?
632デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:22:32.93ID:PHVB0Lj2M >>631
Boostのテンプレートを読んでるのですが、理解できない点です
Boostのテンプレートを読んでるのですが、理解できない点です
633デフォルトの名無しさん (ワッチョイ 22f9-xOzC)
2018/09/22(土) 13:36:27.52ID:a9vdXzW90 >>632
まずはstlは一通り不自由なく使えるかな?
まずはstlは一通り不自由なく使えるかな?
634デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:45:08.87ID:PHVB0Lj2M >>633
はい、STLに関してはそれなりに使えます
はい、STLに関してはそれなりに使えます
635はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 13:53:36.62ID:cynlNZMd0636デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/22(土) 15:05:35.09ID:JTph0UBg0 boost読んでテンプレート勉強しようとするのは、IOCCCでCを勉強しようとするのと同じくらい無謀
637デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/22(土) 23:16:14.20ID:Img386zI0 test
638デフォルトの名無しさん (ワッチョイ b198-rhI1)
2018/09/22(土) 23:16:57.30ID:02eserMU0 アホ
639デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:42:54.42ID:cRG95Xcq0 boostのインチキくさそうなソケット通信とか使ってるヤツいんの
普通にsocket通信の関数で書いたほうが可読性が高そうで困る
普通にsocket通信の関数で書いたほうが可読性が高そうで困る
640デフォルトの名無しさん (ワッチョイ 6e5b-Nssn)
2018/09/23(日) 01:28:26.89ID:MC3A3QT40 SG4に標準化提案はされてるみたいね
641はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/23(日) 03:10:01.78ID:SNhvYMGK0642デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 09:37:53.48ID:LgC14Oo10 bool operator<(const T& a, const T& b)は定義されている前提で、
クラスTについてbool operator==(const T& a, const T& b)が定義されていたらそのoperator==()を使い、
定義されていなかったら
bool operator==(const T& a, const T& b) { return (!operator(a, b) && !operator(b, a)); }
を勝手に補完するようなテンプレート(の特殊化?)ってどうやって書くの?
クラスTについてbool operator==(const T& a, const T& b)が定義されていたらそのoperator==()を使い、
定義されていなかったら
bool operator==(const T& a, const T& b) { return (!operator(a, b) && !operator(b, a)); }
を勝手に補完するようなテンプレート(の特殊化?)ってどうやって書くの?
643デフォルトの名無しさん (ワッチョイ 62f3-coYL)
2018/09/23(日) 11:39:09.69ID:A6XCmyXs0 std::rel_ops空間に == から != を、< から <= > >= を合成するテンプレートならあるけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★9 [ぐれ★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 ★2 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- ㊗157円 [194819832]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- PC初心者でWindows使ってるけど、作業効率一番高いOSって何よ?カスタマイズ豊富なの [916950698]
- B型のハゲが一番ヤバイ
- 【疑問】国政選挙義務投票制議論ってなんで無いの?
- 昭和時代に時計につけてたカレンダーみたいなキーキャップが発売。FILCO [737440712]
