C++相談室 part142

■ このスレッドは過去ログ倉庫に格納されています
2019/04/01(月) 22:17:05.84ID:wmfpIKt/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
C++相談室 part141
https://mevius.5ch.net/test/read.cgi/tech/1550772463/

このスレもよろしくね。
【初心者歓迎】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
616デフォルトの名無しさん
垢版 |
2019/05/21(火) 22:20:27.03ID:p9O37jGc
ヌルーポ
617デフォルトの名無しさん
垢版 |
2019/05/22(水) 00:47:45.78ID:a4QDMpfS
>>602
それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。
2019/05/22(水) 00:51:52.15ID:wNVmTKK9
その環境の標準ヘッダを書き換えたバカがいるとかじゃね
2019/05/22(水) 06:17:49.28ID:t1pLQv56
>>617
>>601
2019/05/22(水) 11:05:25.06ID:bpe9UG2z
>>613
コンストラクタのパラメータ渡すもんやろ
2019/05/22(水) 17:38:02.73ID:754wR9Ar
WindowsのSleep関数みたいな変態マクロが実装されてるとか
2019/05/22(水) 19:05:38.03ID:HXP4tOE0
さっさと元ソースとgcc -Eとgcc -dM -Eの結果貼るか死ぬかどっちか選べ
2019/05/22(水) 19:07:58.37ID:0oi9wkAH
C++ってゲーム業界以外で使われてるの?
2019/05/22(水) 19:10:27.02ID:wNVmTKK9
使われているだろ
少なくともGoogle、アップル、MSでは主要言語のひとつだよ
2019/05/22(水) 19:22:56.56ID:E7rKivNV
メーカーの募集ページでも見れば?
2019/05/22(水) 19:31:09.11ID:HXP4tOE0
今をときめく人工知能のライブラリのほとんどはPythonの皮+C++のコアっていう構成だぞ
2019/05/22(水) 20:00:24.67ID:KVrYPX3F
>>623
テレビ、宇宙、鉄道路線の最短経路
2019/05/22(水) 20:09:03.46ID:tAHmoj8N
あれだけPython重点だったChainerもmasterにC++の自動微分マージしたしな
2019/05/22(水) 21:03:12.50ID:a23nlY2Z
>それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。
心当たりがありすぎるw
これは外には出せんなw
2019/05/22(水) 21:12:32.67ID:omtGQ9bF
>>627
漠然としすぎでよくわからんのだがw
おれの周りだと、重い演算部分だけc/c++でライブラリ化するのはあるけど、
アプリを作るのはないな
c++使える人少ないし
2019/05/22(水) 21:31:18.91ID:G1WjNUUx
>>623
仮想通貨
632デフォルトの名無しさん
垢版 |
2019/05/22(水) 22:42:45.38ID:u7nmxvF3
金毘羅とコンパイラ、どのくらい互換性あるの?
2019/05/23(木) 00:25:21.49ID:uUKvPk1Q
魂斗羅くらいじゃない?
2019/05/23(木) 03:17:45.28ID:tfvbct5D
コンプラの前では何れも塵芥の様なものよ
2019/05/23(木) 10:36:11.44ID:NhdF0b/F
>>497
printfも語順変えられへんで…
2019/05/23(木) 11:31:22.42ID:6zCIietC
>>635
printfはフォーマット文字列を言語ごとに切り替えればいいけど、streamはハードコーディングになってしまう
2019/05/23(木) 11:47:25.42ID:HpI/x5tV
具体的にどんな場面で困るのか例を挙げてもらうと助かる
2019/05/23(木) 12:02:43.15ID:asp3Rd8H
多言語対応とか?
2019/05/23(木) 12:58:07.89ID:NhdF0b/F
>>636
語順変えられへんわ、引数がハードコーディングだわで
printfも変わらんやろっての
2019/05/23(木) 12:59:15.62ID:NhdF0b/F
>>638
streamでも文字列をリソース使えばいいだけやで
641デフォルトの名無しさん
垢版 |
2019/05/23(木) 13:22:43.81ID:ovhRah7H
「Aさんが所有するBをCしますか?」という文章を多言語対応すると、ABCの並びを各言語に応じて変える必要があるでしょ。
書式指定で引数並びを変えることができないprintf()やiostreamでは対応不能。JavaやC#のような対応が正解。
2019/05/23(木) 14:02:03.14ID:PBFS7PSY
>>640
streamだと文字列リソースが細切れになってもとの文字列が何だったかよく分からず翻訳者にそのまま渡せないって問題はあるかも。

いずれにしても、c++の文字列formattingは更新が必要
2019/05/23(木) 14:25:55.23ID:Y2p7ALG3
string_view、constexpr、templateを使えば、C#風のフォーマットも実現できそうな気はする。
2019/05/23(木) 15:31:58.20ID:59bc+gd2
とうとうstreamへの何癖もここまで頭おかしくなったか
645デフォルトの名無しさん
垢版 |
2019/05/23(木) 16:05:52.24ID:ovhRah7H
Do you C B that A owns?
2019/05/23(木) 18:20:07.46ID:NhdF0b/F
>>643
それはコンパイル時に決定してしまうからだめだな。
ロケール設定に合わせて動的に変えられる仕組みではない
2019/05/23(木) 18:37:21.77ID:NhdF0b/F
型指定文字間違えたら簡単に飛ぶscanf系
飛ばないけど書式文字列と書きたい値の型合わせが必要なprintf

まー、ostreamは数値の精度指定とか面倒っちゃー面倒だが
目くじら立てて本質的に駄目って話と違うからなぁ。
2019/05/23(木) 18:39:20.26ID:9reHFHA1
結局、eof までデータを読んで vector に格納する、の正しいやり方が分からない。
リードエラーまで気にするのはやり過ぎだとしても、空行がある場合などにも正しく動くものを作るにはどうするべき?
下のコードでダメな場合ある?
駄目じゃないとしたらもっと洗練されたやり方ある?

vector<double> invec(string filename){
 vector<double> A;
 ifstream fin(filename);
 double temp;
 while(not fin.eof()){
  fin >> temp;
  A.push_back(temp);
 }
 return A;
}
2019/05/23(木) 18:45:48.03ID:GRcYBCGD
そのコードじゃむしろどのパターンでもダメじゃね
最後がダブって格納される
while(fin>>temp) {
A.push_back(temp);
}
2019/05/23(木) 18:57:16.20ID:9reHFHA1
>>649
そのwhileの条件ってtempにEOFが入ったら抜けるってこと?
double型の変数にEOFを入れたら何になるの?
2019/05/23(木) 19:08:43.60ID:0JW0v20n
istreamのoperator boolはEOFでもtrue返すから無限ループだぞ
2019/05/23(木) 19:20:55.28ID:9reHFHA1
じゃあ

while(fin>>temp, (int)temp!=EOF) {
A.push_back(temp);
}

は?
2019/05/23(木) 19:42:12.63ID:GRcYBCGD
>>651
いやdoubleの読み込み失敗するからfailになるだろ
空白読み飛ばすだけならeofしか立たないが
2019/05/23(木) 19:43:51.77ID:fqmO3Q5/
any や、Automaticallyで、機械にやらせてる。
2019/05/23(木) 22:36:29.02ID:9reHFHA1
>>653
> そのwhileの条件ってtempにEOFが入ったら抜けるってこと?

ではなくて、doubleが読み込めなかったら false になるのですね
ありがとうございます
2019/05/24(金) 00:15:40.41ID:oGkYW18h
質問です。
単純なforループ処理の途中でエンターキーを押したらストップ、もう一度押すとスタートみたいなことをするにはどうしたらいいですか?
2019/05/24(金) 01:06:43.34ID:Ph/OCthx
対象がコンソールか、ウィンドウかで違う。

conio.h使える環境で、コンソールだったら、_kbhit()と_getch()使えば実現はできるが、ウィンドウプログラムの場合はウインドウの作法に則る。

コルーチンは言ったら、少し楽になる予定??
2019/05/24(金) 04:01:03.95ID:qG9wsGG5
>>656
fiber使うとか?
APIが環境によって違うのが難点だがコルーチンより融通効くし。
2019/05/24(金) 09:10:37.78ID:oGkYW18h
>>657
コンソールです
2019/05/24(金) 10:25:59.77ID:Ph/OCthx
>>659
MITライセンスな〜〜っ。
暇だから書いたけど、自分の環境のVS2017だとこれしかわからない。
環境依存ちょびっとあるからご注意。

#include <iostream>
#include <cstdint>
#include <limits>
#include <thread>
#include <conio.h>

int main() {

for (std::intmax_t i = 0; i < std::numeric_limits<std::intmax_t>::max(); i++) {
std::cout << i << "\r";
if (_kbhit()) {
_getch();//output first key in.
std::cout << "Wait key in."<<"\r";
_getch();//wait next key in.
std::cout << " "<<"\r";
}
}

return 0;
}
2019/05/24(金) 10:26:55.58ID:Ph/OCthx
あ、そうだった。空白が整形されるの忘れてた。
2019/05/24(金) 10:52:12.22ID:Ph/OCthx
>>660
スレッドスリープするかもと思って、threadのヘッダーはいってるけど。使わなかったのを忘れていた。
2019/05/24(金) 14:04:30.69ID:ff7E+a9X
独自定義したクラスAのlistに、プッシュした場合、新しいインスタンスが作られる?それともアドレスの代入??

list<A> List=new.....;
A a();
List.push(a);
2019/05/24(金) 14:08:18.47ID:G1wpIN0H
インスタンス
2019/05/24(金) 14:30:44.82ID:h/Cubnb+
>>649,653,655
俺は個数指定して読み込むということしかやったことないんだが、この方法って他の型でも使えるの?
int だったら
> doubleが読み込めなかったら false になる
というのが成立しないように思えるのだが
2019/05/24(金) 14:38:19.15ID:QfLs460A
ユーザー定義型なら演算子をオーバーロードするんやで
2019/05/24(金) 14:42:16.00ID:FKmlSCsi
>>665
doubleじゃなかったら、じゃなくてEOFを読んだらfalseになるんだろ
こういうのお洒落なやり方だと思うがなんとなく怖いから俺も個数決めてやってるよ
スタンスの問題
2019/05/24(金) 15:28:08.39ID:YkjJvwKv
まあテキストファイルと言っても普通はフォーマットがもっと厳密に決まっているから、一行読み込んでパースしてって感じでやるな
エラー起こったときにこれじゃ行数すら出せないし
2019/05/24(金) 15:34:20.96ID:YkjJvwKv
その場合でもgetlineをwhileの中にいれておけば期待した動作になる

最後の行に改行があろうが無かろうがうまくいく
2019/05/24(金) 20:38:16.34ID:0N6+tWvP
>>663
A のコピコンが走りますよ!
2019/05/29(水) 18:18:13.81ID:hag6qvkh
mainより上で

struct test{int x=0};
struct test obj;
obj.x=99;

ってやると三行目がエラーなんだけどなんでダメなん?
技術的になんでダメなのか教えてください
2019/05/29(水) 18:41:42.94ID:8RGCI467
>>671
関数の外で
a = 2;
とか
a = a + 1;
は書けません
2019/05/29(水) 19:12:40.01ID:hag6qvkh
ありがとございます
674デフォルトの名無しさん
垢版 |
2019/05/29(水) 19:17:03.50ID:Rr995jUT
DOUBLEのSACHIKO。
2019/05/30(木) 21:51:31.71ID:z7Zp5hm5
戻り値だけのオーバーロードしたいんだけど、むり?
2019/05/30(木) 21:57:39.88ID:WLaiWVCj
無理です
2019/05/30(木) 22:06:45.23ID:rhzd9E8p
天婦羅
2019/05/30(木) 22:27:06.43ID:rl6Tun4v
どうやって使うつもりなのかな
2019/05/30(木) 22:59:49.76ID:aiZ1ZVIC
T f();
auto a = f<Type>();
2019/05/30(木) 23:10:37.32ID:rl6Tun4v
>>679
これはよくやる
2019/05/30(木) 23:12:17.72ID:rl6Tun4v
auto a=std::make_shared<A>();
みたいな感じで
2019/05/30(木) 23:16:18.93ID:z7aQRPDh
実数と複素数のジェネリックプログラミングってどうやるの

実パラメータの数が違うから、結局ほとんどの機能を特殊化してるんだが
2019/05/30(木) 23:19:08.26ID:rhzd9E8p
>>682
std::complexとテンプレートを
2019/05/30(木) 23:19:32.75ID:s4B+etfT
複素数と実数をジェネリクスでまとめると大抵死ぬぞ。
行列ライブラリなんかも基本別関数だから。
2019/05/30(木) 23:40:09.00ID:z7aQRPDh
>>684
やらないのが正解ってことで良いですか?
686デフォルトの名無しさん
垢版 |
2019/05/31(金) 19:07:02.02ID:5tY3IGQl
ジェネリック医薬品。
2019/05/31(金) 20:46:39.86ID:SYuh0ZxQ
>>685
そう。やらないのが正解。
2019/05/31(金) 22:32:45.09ID:YZ9ZViZw
なんでよ 理由を教えてくれ
2019/05/31(金) 22:41:35.25ID:8uAssd9+
理由?やる理由がないからだよ
できるからというだけの理由で無駄な汎用性を持たせようとして無駄に複雑で使いづらい糞が生み出されて結局使われないパターンを嫌というほど見てきたわ
2019/05/31(金) 22:51:46.17ID:YZ9ZViZw
うーんそういうもんかね

ある型について定義したジェネリック関数群全てを特殊化するはめになって
もうこれ型パラメータの意味ほぼねぇな
ってなったことはあったけど
691デフォルトの名無しさん
垢版 |
2019/06/01(土) 01:01:06.10ID:jOO/UBvi
パワー系がいて、通り過ぎる人が眼鏡をかけていれば「メガネ、メガネ」、胸の大きい女性なら「オッパイ、オッパイ」と特徴を呟いていたんです。
私は「ヒゲ」と言われたのですが、ひげ生やしていないんですよね。
誰かこの暗号解ける?
2019/06/01(土) 01:21:48.47ID:amrEPTXm
>>690
今の複素数の例がそれそのものじゃん
2019/06/01(土) 01:28:26.64ID:vdsZQvk5
>>692
一応関数インターフェースの統一ができるから…
2019/06/01(土) 01:34:23.92ID:5ncHXmxx
std::complex使えばおおよその計算はdoubleその他と共通化できない?
虚部実部を見に行かない範囲ならなんとか
2019/06/01(土) 07:39:23.04ID:gFsX3PNG
そこまで無理に場合分けして共通化させるなら初めから
独立に定義したほうがいい。
しっかり勉強してきた奴ほど無理やり継承ツリーでまとめようとする傾向にある。
それが行き過ぎると無駄なジェネリックの登場となる。
2019/06/01(土) 08:15:26.41ID:uvuK6mvN
まあ一度はそういう経験しておいた方がいいな
2019/06/01(土) 08:43:52.63ID:QzRnFnM6
コルモゴロフ複雑性は計算不能なのだから
プログラムのあるべきコンパクトさについて一般論は存在しない
この点プログラムの記述方法の選択はまさに個々人のセンスに依存したartであり
真に人間らしい営みであると言える
2019/06/01(土) 09:38:35.51ID:zEOJGQ26
仮に実数と複素数を継承関係にさせるとして、どっちを親にすべきかで広い合意は取れないからな
円楕円問題と同じ
2019/06/01(土) 11:24:10.29ID:x6StDmNU
たとえすべての関数を特殊化することになったとしても、大部分のifを共通化できるはずで、他のクラスのテンプレ引数として区別なく使えるようになるからそれなりに意味はあるでしょ。
2019/06/01(土) 13:24:21.51ID:ws//1RZ4
意味はないよ
そもそも複素数なんて仮にそれを多用する分野のタスクだったとしても実数に比べて使用頻度は低いんだから、
タスクで本当に必要なものだけを実装すればよい
701デフォルトの名無しさん
垢版 |
2019/06/01(土) 14:00:28.34ID:jOO/UBvi
いや、実数が使えたためしがないから、俺の爺ちゃんが量子を考案したのだが。
2019/06/01(土) 14:17:26.49ID:eS53UGey
お前のじーちゃんシュレーディンガーかよ
703デフォルトの名無しさん
垢版 |
2019/06/01(土) 14:38:11.54ID:jOO/UBvi
高校のとき、心のお兄ちゃんとか心の妹とか流行ってたな。
2019/06/01(土) 15:52:18.02ID:gFsX3PNG
29=(5+2i)(5-2i)
こんな風に因数分解して欲しくケースなんてほとんどないだろ。
変にポリモルフィックにやるべきじゃない。
2019/06/01(土) 16:12:58.52ID:vdsZQvk5
おじちゃん今継承とか動的多態の話しはしてないよ?
2019/06/01(土) 16:28:52.97ID:gFsX3PNG
は?c++でジェネリクスやろうとすればデフォルトで使うことになるだろ?
ボケちゃったのかな?
2019/06/01(土) 16:40:59.16ID:vdsZQvk5
えっそうなの?
C++でジェネリクスてtemplate使うから継承とか関係なくね
例えば実数と虚数に対応するplus関数を作るとしてどういう実装を想定してんの
2019/06/01(土) 18:04:51.32ID:ws//1RZ4
>>707
テンプレートによるstructual subtypingはポリモーフィズムの実装の一種だよ
2019/06/01(土) 18:35:49.34ID:y869pNJN
conceptはともかく現行のc++のそれを構造的部分型とは言いたくない気持ちがあるのは分からないではない
2019/06/01(土) 20:21:39.08ID:HfNJIaau
マルチエージェントシミュレーションをしたいんですけど、環境と個々のエージェントのクラスはどういった関係で持てばいいんでしょうか
現在はエージェント・環境の全部のインスタンスを進行を行うクラスに持たせています
しかし個々のエージェントが相互の情報を知りたいときに相互にアクセスできるようにするにはどうしたらいいでしょうか?

全てのエージェントが全てのエージェントの参照を手にするのはどこで書き換えが起こるか分からなくなるのでしたくありません
2019/06/01(土) 20:32:54.41ID:ws//1RZ4
>>710
お前は街にいる人間全員のパンツの柄を知っているのか?
意味のあるシミュレーションをやるからにはエージェントが知ることのできる情報の範囲や内容は明確に定義されていなければならないはずだろう
その定義に従った情報を取得する手段がエージェントに提供されていればよい
2019/06/01(土) 20:55:47.81ID:HfNJIaau
例えば互いの距離を知りたい場合どうすればいいですか?
2019/06/01(土) 21:01:47.55ID:O6/ikTFN
GPSで二つの位置を測定して、その差を求める。
2019/06/01(土) 21:14:48.00ID:QKlis6p8
二人の心の距離は測れますか
2019/06/01(土) 21:14:55.91ID:wq+pItFK
>>712
神クラスが更新対象のエージェントと周囲の各エージェントとの距離を予め計算し、更新対象のエージェントに計算結果のセットを渡す
そして更新対象エージェントはその結果セットの内容のみに従った行動をするだけ
それをエージェント毎、ステップ毎に繰り返す
実際に必要とされるまで計算を遅延する等、効率化のための実装の工夫は必要だろうけどね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況