C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part150
https://mevius.5ch.net/test/read.cgi/tech/1584975873/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
テンプレここまで
探検
C++相談室 part151
レス数が1000を超えています。これ以上書き込みはできません。
2020/05/14(木) 11:53:25.59ID:ZPCfyTux
983デフォルトの名無しさん
2020/07/11(土) 05:56:37.58ID:ckcY8r2v やっぱ>>933とか簡潔に要点が押さえてあるとオモタ、
GetHoge()が呼ぶたびに毎度新しく作ったvectorを返すのならディープコピーを返したらええ
ディープコピーは生成元と所有権で揉めることがありえないからふつくしい
最適化によって実際にはreturn時にvectorの要素がコピーのかわりにmoveされるかもわからんがふつくしさは損なわれない
(さらにいうと、GetHoge()がインライン関数なら最適化でそもそもvector自体のコピーも移動も起きない公算がおおきい
>>918-919な疑問に関しては、
std::vector<T> v1 = GetHoge(); // std::vector<T>のディープコピーを返すバージョンのGetHoge()
std::shared_ptr<std::vector<T> > ptr(new std::vector<T>(v1)); // (*1)
で良いジャマイカ、
非バカが見れば(最適化有効化時は)実際には*1において、v1の要素が*(ptr.get())にコピーではなくmoveされる公算が大きいということがワカル
しかしバカが見ても動作は明確でなんの危険も無い
ptrが一時オブジェクトであっても問題が無い
それでいいジャマイカ、にんげんだもの
GetHoge()が呼ぶたびに毎度新しく作ったvectorを返すのならディープコピーを返したらええ
ディープコピーは生成元と所有権で揉めることがありえないからふつくしい
最適化によって実際にはreturn時にvectorの要素がコピーのかわりにmoveされるかもわからんがふつくしさは損なわれない
(さらにいうと、GetHoge()がインライン関数なら最適化でそもそもvector自体のコピーも移動も起きない公算がおおきい
>>918-919な疑問に関しては、
std::vector<T> v1 = GetHoge(); // std::vector<T>のディープコピーを返すバージョンのGetHoge()
std::shared_ptr<std::vector<T> > ptr(new std::vector<T>(v1)); // (*1)
で良いジャマイカ、
非バカが見れば(最適化有効化時は)実際には*1において、v1の要素が*(ptr.get())にコピーではなくmoveされる公算が大きいということがワカル
しかしバカが見ても動作は明確でなんの危険も無い
ptrが一時オブジェクトであっても問題が無い
それでいいジャマイカ、にんげんだもの
984デフォルトの名無しさん
2020/07/11(土) 12:27:05.11ID:wTK7zrpK なんだかものすごく懐しさを思わせる文体だな
20年ぐらい前のニチャンネラーの書き方だな
20年ぐらい前のニチャンネラーの書き方だな
985デフォルトの名無しさん
2020/07/12(日) 06:25:16.82ID:tiZP2jTh ある整数nが他の整数の4乗であることを調べたい。
(int)pow(pow(n, (double)1/4), 4) が n であるかどうか調べりゃ良いよな?
キャストはどっちかのpowにつければ十分だよね?
(int)pow(pow(n, (double)1/4), 4) が n であるかどうか調べりゃ良いよな?
キャストはどっちかのpowにつければ十分だよね?
987デフォルトの名無しさん
2020/07/12(日) 06:48:24.60ID:D8OEpmlP なにそのカッコ
988デフォルトの名無しさん
2020/07/12(日) 06:52:03.42ID:D8OEpmlP powよりsqrt 2回の方が良い
浮動小数点演算が非常に遅い環境なら
整数の2分検索という手も
浮動小数点演算が非常に遅い環境なら
整数の2分検索という手も
989デフォルトの名無しさん
2020/07/12(日) 07:00:58.89ID:D8OEpmlP int m = (int)sqrt(sqrt((double)n);
if (n == m*m*m*m) ...
普通はこれで良い
if (n == m*m*m*m) ...
普通はこれで良い
991デフォルトの名無しさん
2020/07/12(日) 07:03:01.16ID:D8OEpmlP >>985だと内側のpowの結果を整数に丸めないと
992デフォルトの名無しさん
2020/07/12(日) 07:05:50.02ID:D8OEpmlP >>990
2個のn*nを1回にするかどうかはコンパイラ次第
コンパイラに頼るならカッコつけずにn*n*n*nで良いし
頼らないならn*nを一時変数に一旦入れないと
そもそもnを4乗しても意味ないけど
2個のn*nを1回にするかどうかはコンパイラ次第
コンパイラに頼るならカッコつけずにn*n*n*nで良いし
頼らないならn*nを一時変数に一旦入れないと
そもそもnを4乗しても意味ないけど
993デフォルトの名無しさん
2020/07/12(日) 07:06:15.17ID:m1mq7f3n 外でキャストしても無意味だろ、内をキャストしなきゃ
intにキャストだと誤差で1減る可能性があるから四捨五入しなきゃダメ
でだ、4乗するのにpow()はありえないし
4乗根もpow()よりsqrt(sqrt())の方がマシじゃないかな
でだ、元々整数だけの問題なのにsqrt()使うのが嫌
二分探索で(x * x * x * x) == nになるxを探す方がいいんじゃ?
intにキャストだと誤差で1減る可能性があるから四捨五入しなきゃダメ
でだ、4乗するのにpow()はありえないし
4乗根もpow()よりsqrt(sqrt())の方がマシじゃないかな
でだ、元々整数だけの問題なのにsqrt()使うのが嫌
二分探索で(x * x * x * x) == nになるxを探す方がいいんじゃ?
994デフォルトの名無しさん
2020/07/12(日) 07:12:28.75ID:D8OEpmlP nが平方数なら
普通はsqrt(n)の結果に誤差は無い
nもdoubleも32bitの環境でdoubleキャストによって誤差が出る場合や
sqrtの計算方法が普通ではない場合には
丸め方法も考えないと
普通はsqrt(n)の結果に誤差は無い
nもdoubleも32bitの環境でdoubleキャストによって誤差が出る場合や
sqrtの計算方法が普通ではない場合には
丸め方法も考えないと
995デフォルトの名無しさん
2020/07/12(日) 07:15:24.87ID:tiZP2jTh 二分探索ってO(log n)でしょ?
sqrtとかpowより速いの?
これも「実装依存」なの?
sqrtとかpowより速いの?
これも「実装依存」なの?
996デフォルトの名無しさん
2020/07/12(日) 07:16:36.03ID:tiZP2jTh まあ速さよりは間違えそうじゃなさと文法的な分かりやすさ、短さの方が今求めてるものですけど
言ってなくてすみません
言ってなくてすみません
997デフォルトの名無しさん
2020/07/12(日) 07:18:45.88ID:D8OEpmlP doubleが非常に遅い環境や
浮動小数点演算のライブラリを積みたくない場合
などで2分検索を使う場合もある
という程度
浮動小数点演算のライブラリを積みたくない場合
などで2分検索を使う場合もある
という程度
998デフォルトの名無しさん
2020/07/12(日) 08:11:47.62ID:oJ0fA8EI 「平方数か」を高速に判定する方法があれば、
平方数なら → 平方根を計算 → 平方根が平方数か
…という2段階の判定もありそうな感じ。
平方数なら → 平方根を計算 → 平方根が平方数か
…という2段階の判定もありそうな感じ。
999デフォルトの名無しさん
2020/07/12(日) 08:31:16.95ID:m1mq7f3n1000デフォルトの名無しさん
2020/07/12(日) 09:41:30.40ID:uBv3fNFk 整数Cを素因数の4乗で割っていき、
1になるまで余りが出なければ、
全体は整数の4乗である
1になるまで余りが出なければ、
全体は整数の4乗である
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 58日 21時間 48分 5秒
新しいスレッドを立ててください。
life time: 58日 21時間 48分 5秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【給食無償化】国が全額負担 自維公3党、近く合意へ [ぐれ★]
- 「レーダー照射」なぜ中国は素直に謝罪しないのか 非を認めず反論、逆ギレ「ごめんなさい」と言えない国情★2 [七波羅探題★]
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★6 [お断り★]
- 40代教員、1億8600万円分の暗号資産だまし取られる 「警察手帳のような物」見せられ−滋賀県草津市 [蚤の市★]
- 松村沙友理、スタバは好きだけど「やっぱコーヒーに700円800円が…」「家でお湯わかしてやったらタダやん」 [muffin★]
- 【千葉】「使用済みの生理用品が欲しくて」 女子トイレに侵入した疑い、自称塾講師(28)を逮捕 四街道署 [nita★]
- 【緊急】朝倉未来のブレイキングダウンで不意打ち食らって失神した選手、くも膜下出血で死亡 [455031798]
- 全員ぶっ殺すお🏡
- 高市早苗「為替は色んな要因で市場が決めるもの、私のせいじゃないわよ!」 [972432215]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★4
- 月曜日のんなぁ…お疲れ様なのらね…✋🍬ハウス🏡
- 日本、30年ぶりに金利0.75%に! [219241683]
