C++相談室 part142
■ このスレッドは過去ログ倉庫に格納されています
次スレを立てる時は本文の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 >>660
スレッドスリープするかもと思って、threadのヘッダーはいってるけど。使わなかったのを忘れていた。 独自定義したクラスAのlistに、プッシュした場合、新しいインスタンスが作られる?それともアドレスの代入??
list<A> List=new.....;
A a();
List.push(a); >>649,653,655
俺は個数指定して読み込むということしかやったことないんだが、この方法って他の型でも使えるの?
int だったら
> doubleが読み込めなかったら false になる
というのが成立しないように思えるのだが ユーザー定義型なら演算子をオーバーロードするんやで >>665
doubleじゃなかったら、じゃなくてEOFを読んだらfalseになるんだろ
こういうのお洒落なやり方だと思うがなんとなく怖いから俺も個数決めてやってるよ
スタンスの問題 まあテキストファイルと言っても普通はフォーマットがもっと厳密に決まっているから、一行読み込んでパースしてって感じでやるな
エラー起こったときにこれじゃ行数すら出せないし その場合でもgetlineをwhileの中にいれておけば期待した動作になる
最後の行に改行があろうが無かろうがうまくいく mainより上で
struct test{int x=0};
struct test obj;
obj.x=99;
ってやると三行目がエラーなんだけどなんでダメなん?
技術的になんでダメなのか教えてください >>671
関数の外で
a = 2;
とか
a = a + 1;
は書けません T f();
auto a = f<Type>(); auto a=std::make_shared<A>();
みたいな感じで 実数と複素数のジェネリックプログラミングってどうやるの
実パラメータの数が違うから、結局ほとんどの機能を特殊化してるんだが >>682
std::complexとテンプレートを 複素数と実数をジェネリクスでまとめると大抵死ぬぞ。
行列ライブラリなんかも基本別関数だから。 >>684
やらないのが正解ってことで良いですか? 理由?やる理由がないからだよ
できるからというだけの理由で無駄な汎用性を持たせようとして無駄に複雑で使いづらい糞が生み出されて結局使われないパターンを嫌というほど見てきたわ うーんそういうもんかね
ある型について定義したジェネリック関数群全てを特殊化するはめになって
もうこれ型パラメータの意味ほぼねぇな
ってなったことはあったけど パワー系がいて、通り過ぎる人が眼鏡をかけていれば「メガネ、メガネ」、胸の大きい女性なら「オッパイ、オッパイ」と特徴を呟いていたんです。
私は「ヒゲ」と言われたのですが、ひげ生やしていないんですよね。
誰かこの暗号解ける? >>692
一応関数インターフェースの統一ができるから… std::complex使えばおおよその計算はdoubleその他と共通化できない?
虚部実部を見に行かない範囲ならなんとか そこまで無理に場合分けして共通化させるなら初めから
独立に定義したほうがいい。
しっかり勉強してきた奴ほど無理やり継承ツリーでまとめようとする傾向にある。
それが行き過ぎると無駄なジェネリックの登場となる。 コルモゴロフ複雑性は計算不能なのだから
プログラムのあるべきコンパクトさについて一般論は存在しない
この点プログラムの記述方法の選択はまさに個々人のセンスに依存したartであり
真に人間らしい営みであると言える 仮に実数と複素数を継承関係にさせるとして、どっちを親にすべきかで広い合意は取れないからな
円楕円問題と同じ たとえすべての関数を特殊化することになったとしても、大部分のifを共通化できるはずで、他のクラスのテンプレ引数として区別なく使えるようになるからそれなりに意味はあるでしょ。 意味はないよ
そもそも複素数なんて仮にそれを多用する分野のタスクだったとしても実数に比べて使用頻度は低いんだから、
タスクで本当に必要なものだけを実装すればよい いや、実数が使えたためしがないから、俺の爺ちゃんが量子を考案したのだが。 高校のとき、心のお兄ちゃんとか心の妹とか流行ってたな。 29=(5+2i)(5-2i)
こんな風に因数分解して欲しくケースなんてほとんどないだろ。
変にポリモルフィックにやるべきじゃない。 は?c++でジェネリクスやろうとすればデフォルトで使うことになるだろ?
ボケちゃったのかな? えっそうなの?
C++でジェネリクスてtemplate使うから継承とか関係なくね
例えば実数と虚数に対応するplus関数を作るとしてどういう実装を想定してんの >>707
テンプレートによるstructual subtypingはポリモーフィズムの実装の一種だよ conceptはともかく現行のc++のそれを構造的部分型とは言いたくない気持ちがあるのは分からないではない マルチエージェントシミュレーションをしたいんですけど、環境と個々のエージェントのクラスはどういった関係で持てばいいんでしょうか
現在はエージェント・環境の全部のインスタンスを進行を行うクラスに持たせています
しかし個々のエージェントが相互の情報を知りたいときに相互にアクセスできるようにするにはどうしたらいいでしょうか?
全てのエージェントが全てのエージェントの参照を手にするのはどこで書き換えが起こるか分からなくなるのでしたくありません >>710
お前は街にいる人間全員のパンツの柄を知っているのか?
意味のあるシミュレーションをやるからにはエージェントが知ることのできる情報の範囲や内容は明確に定義されていなければならないはずだろう
その定義に従った情報を取得する手段がエージェントに提供されていればよい 例えば互いの距離を知りたい場合どうすればいいですか? >>712
神クラスが更新対象のエージェントと周囲の各エージェントとの距離を予め計算し、更新対象のエージェントに計算結果のセットを渡す
そして更新対象エージェントはその結果セットの内容のみに従った行動をするだけ
それをエージェント毎、ステップ毎に繰り返す
実際に必要とされるまで計算を遅延する等、効率化のための実装の工夫は必要だろうけどね あらゆる数値型二つを引数にとるdistance関数を定義しろ
あとは二人の心の位置を表す型で特殊化しろ STGの当たり判定やガンパレの頭から伸びるラインだろ
神のような仲介者mediatorを置けばいい 神クラスが全エージェント間の距離を計算し続けるのはエージェントN個の完全グラフの枝
N*(N-1)/2個の長さを更新し続けるということであっていかにも無駄が大きい少なくともエー
ジェントが置かれる環境のデータ表現と「互い」とは何かが定義されねばならないありがちな
環境表現としては二次元座標のリストとか正方形や六角形のセル表現とかがありがちで「
互い」というのは普通はエージェントの感覚器と環境(遮蔽物とか)とのインタラクションで規
定されるように作るからそういったブツもシミュレートせよ >>714
まずは心の距離を定義するところからはじめよう 質問よろしいでしょうか?CORBAってもう古いですか?
CORBAのサンプルをこねくり回して送受信するオブジェクトを2つと一時停止や終了をコントロールする
オブジェクトを作ったのですが、お互いに送受信すると思ったら片方が送信しまくって受信が検出できな
いようで困ってます。送信を止めると前に送ったものを受信します。
送信する時に少しsleepを入れると遅いですが思った通りの動きになります。
出来ればsleepなしで動いてほしいのですが、omniORBって同時に送受信できないのでしょうか? CORBAの動きはよく分からんあれ本当にまともに動くのか d1の実部 d1の虚部
d2の実部 d2の虚部
...
か
d1
d2
...
というフォーマットのファイル(の名前)が与えられたときに、前者なら複素数として、後者なら実数として読んで vector に格納する関数ってどう書くべきでしょうか auto f(std::filesystem::path const& n)
{
using T=double;
auto ret=
std::vector<std::complex<T>>{};
std::ifstream in(n);
std::string line;
while(std::getline(in,s)) {
std::istringstream ss(s);
T r{},i{};
ss >> r >> i;
ret.emplace_back(r,i);
}
rerurn ret;
} 【速報】金券五百円分とすかいらーく優侍券をすぐもらえる
https://pbs.twimg.com/media/D8I_oeBUIAc0a-m.jpg
@ スマホでたいむばんくを入手
A 会員登録を済ませる
B マイページへ移動する
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)
今なら更に4日18時までの登録で2倍の600円の紹介金を入手
クオカードとすかいらーく優待券を両方ゲットできます。
数分で出来ますのでぜひお試し下さい valgrindって今も使われてますか?
通信にBoost.MPI、ファイル入出力にHDF5を使う並列プログラムをInfinibandなネットワーク環境で走らせてるんですが
valgrindにかけるとアホみたいにエラーが出てうんざりします。
シコシコSuppression Fileを用意するしかないんですかね vectorなりstringなりの各要素をfor文で回すとき何も考えずに例えば
for(int i = 0; i < v.size(); ++i)みたいなコード書いてたんだけどさ
C++プライマーで勉強してたらやっぱsize_typeとかautoとかイテレーターとか使ったほうがいいのかなぁって
signedかunsignedかなんてまず問題にならないようなちょっとしたループでも気をつけるべき?気をつけてます? 要素インデックスを表現する変数にはint型を使わずsize_t型を使うようにする、とかかな。
nposによる未検出判定があるから仕方なしにだけど。 んなくだらんことで悩むくらいならその外側で監視するコードでも組んだ方が100倍生産的だわ。 ループ変数にsize_t使うのを徹底しようと思い立ったことも昔あったけど
operator[]とかにsize_t変数入れると「intじゃない!!!ムキー!!!」って警告ほざくクソライブラリがこの世に多すぎて挫折した 今や64bitコンパイラが普通だからintよりも暗黙な64bit対応としてsize_tを使うこと増えたんじゃないかな。
intみたいな32bit変数のままだとコンパイル時に警告が大量に出るし、とりあえず無難にsize_tにしとくわ的な感じになってる。 size_tは符号ありにすべきだった
と誰か反省してたよな
ホントめんどくさい その前にビットサイズ付きintでかかれるケースが増えるだろ。 BigInteger書いてるんだけど、補数表現がわけわかめで死にそうになってる。
ウィキペディア頼りで加減算はできたけど、掛け算どうやるねん。
そこで、補数で小学生にもわかるレベルの補数表現の解説プリーズ。 そのままunsigned同士の掛け算すればいいんじゃね?
で長くなったbit数の結果からMSBから変わる直前まで好きなように切り詰める。 >>743
とりあえず4bitで正数、負数を使った四則演算を手で紙に書いて解いてけば理解できないかな コピーコンストラクタを避ける目的でswap使うことってありますか? 会社に行っても仕事しないのに、リモートワークとか無理だわ 給料は働いた分だけでいいならリモートワークやりたい >>747
インディーゲームデベロッパでリモートワーク・・年収500万から800万・・・
怪しい匂いしかしない・・ 743です。
解説ありがとう。理解できない頭をボンバヘッしたい感じです。
しばらく凍結させるので供養しておきます。
供養:https://dotup.org/uploda/dotup.org1865161.zip void func(int& n){...}
int main(){int a = 0; func(a)}
こんな感じで関数の引数が参照のとき呼び出す側は変数そのまま突っ込みますよね
これなんで&aにしないんですかね。型がちげーよって怒られそうなもんですが
基本的なことだと思うんですけどどうもググっても大丈夫な理由が見つからないもので
そもそも
int val = 0;
int& refval = val;
みたいな書き方もしますよね。やっぱり左右で型違うよねって
ポインタならint* p pval = &valって&つけるのに。どうなってんでしょ >>750
ネコぱらがアホみたいに売れたから気前よくなってる可能性 template <auto N>とかできるんだな。 カッコつけずに byref とか予約語作ればよかったんだよ。
同様に関数の後に=0でpure virtualとかバカジャネーノ。 参照ってもともと演算子オーバーロードのための機能なので
呼び出し側でなんかさせるわけには行かなかったんだよ >>759
参照とオーバーロードにどういう関係がありますのん? ■ このスレッドは過去ログ倉庫に格納されています