C++相談室 part139
レス数が1000を超えています。これ以上書き込みはできません。
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
このスレもよろしくね。
【初心者歓迎】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 std::getは固定長コンテナなら何でも使えるぞ
std::pairでもstd::arrayでも生配列でも >>949
std::getにすることによってテンプレート引数にtupleと見なせる型(pair,array)を使うことができるようにしたいからそうなっている ちなみにstd::getのユーザーによる特殊化は次から禁止される予定です ポリモーフィズムを使っていて、ダウンキャストを行うときって
dynamic_castをしてみてnullptrかどうかを判断するのがベストな手順なんですか?
RTTIから実際の型情報を引っ張ってくる手段はないものでしょうか >>955
もちできるけど、検査したい型を継承した型を渡されたら動かないよ? >>955
それこそポリモーフィズムで派生クラスのthisを直でもらえばいいんじゃないの >>955
typeid で type_info 取れるよ。
基底クラスにenum Type 等を持たせてswitchも手の一つ。
処理内容によってはvisitor パターンが使える。俺が知ってるのはこれくらい。 まず、なるべくダウンキャストなんか必要ないようにするのが最初だけどな >>955
ダウンキャストが必要になるなら、選択はそれしかない >>955
ダウンキャストしたいんだよね?
なんで実際の型情報なんかを欲しがる理由がわからん カミカゼキャストについて教えてください。
不意にフレーズが浮かんだのです。 dynamic_castでnullptrなりbad-cast拾うのはお勧めできない。 >>965
nullptrでキャスト可否を確認するのは普通の使い方だろ… cならともかくc++でキャストが必要になるのはどっかやばいことになってる可能性を考えた方がいい ライブラリの関数の引数が非constのchar配列で渡したい文字列がstd::stringに入ってるとき
.c_str()をconst_castしてるけどあかんの opencvを使用して画像処理を行ってるんですが画像データにAWGNを加える方法が分かりません
グレースケール化させて処理をしています
乱数生成などは理解しているんですがその乱数を使ってどのような値として輝度値に影響させるのかが分かってません
よろしくお願いします
visual c++を使用しています >>969
Mat s;
src.convertTo(s, CV_16S);
Mat noise(s.size(), CV_16S);
randn(noise, 0, sigma);
Mat temp = s + noise;
temp.convertTo(dst, CV_8U);
今こう考えているんですがあっていますでしょうか
srcが原画像、dstがノイズ画像です >>955
RTTIから実際の型情報を引っ張ってくる手段というとtypeidだね
void func(ios_base* ptr)
{
if(typeid(*ptr) == typeid(istream) { /* ... */ }
if(typeid(*ptr) == typeid(ostream) { /* ... */ }
} >>968
非constのchar配列を要求するという事は書き換えられる可能性がある
逆にconst付でchar配列を返す方は書き換えないという前提で渡してる
面倒だけどコピーしてから渡すべき >>973
さすがに神経質すぎる
そのライブラリの関数が文字列を書き換えない仕様なんだったら信用すればよい
そんなこと言い出したら何一つ信用できなくなってプログラムなんか書けん >>974
書き換えない、という仕様なら最初からconstを要求すればいいだけのこと
constを要求していない以上書き換えられる可能性を考慮するのは当たり前の前提 constついてないってことは内部で書き換えるという明確な意思表示だろ あと、ライブラリを作った奴のスキルの問題でconstを付けるべきときに付いてないのも仕事でやってりゃ普通にあるぞ Cのライブラリに渡すのならなおらstd::stringの内部配列を渡すべきでないし
そのようなスキルの低い作者の作ったライブラリの何を信用しろと言われるのか なにもそう煽らなくても
現場の人間か責任を負う立場の人間かで意見も異なるのがわかるだろうに 責任を負う立場の人間がconstがどうのなんて気にするわけないでしょw
「契約相手がそう言ってるなら信用すればよい。違っていたら相手の責任だ。」で終わりだよ まあ契約でそうなってても残業するのは作業者だからな。。
バカの言うことなんて信用しないで安全に倒した方が正解だわ。 constは付いてないですけど内部で書き換えはしません
なんて仕様書に書いてあるのか void displayText(char* text);
文字列を表示します
text : 表示する文字列
これが仮にtextを書き換えてしまうとして、それをコピーで回避できたとしても、
そんなレベルのゴミがまともに機能するとは到底思えん
そんなことを言い出したらキリがない >>942
1. 要素数を N としたとき、1つの要素の処理に要する時間が O(N) になるか、
O(1) などの違いなので、本質的にハードがいくら良くなっても解決する
問題ではない。O(N) のアルゴリズムは、N が大きくなった場合には、
ハードの良さを台無しにしてしまう。なので、アルゴリズムの選定はとても
重要。
2. 動的配列でも、配列の最後に追加する場合は、リンクリストと遜色ない速度は
出る可能性は十分あるが、配列の途中に追加する場合は、宇宙人でも無理。
3. 逆に、リンクリストの場合は、先頭から数えて、「k 番目の要素」にランダム
にアクセスすることを高速化することは、宇宙人でも無理。
4. 「宇宙人でも無理」の意味が理解できるためには、数学的感性が必要。
理解できない人には理解できないかもしれない。 >>986
問題は、リンクリストの途中に挿入したいとき、予め挿入位置の直前や直後のノードへのポインタを持っていなければならないことだ
そんなケースは現実の開発において殆ど無い
持っていなければ挿入位置に辿り着くまでにO(N)のシーケンシャルアクセスが発生する
そして、リンクリストはメモリアクセスの局所性が欠片もないデータ構造であり、
動的配列と比較してシーケンシャルアクセスのパフォーマンスは極めて劣悪である テキストエディタのバッファ管理なんてのが
そのケースなんですけどね >>968
あかん。データを壊したくなかったら、別途コピーしたものを渡すべき。 俺の上司とかconstって何?よけいなもんつけんなっていうおじさんだから内政のライブラリは参照でもconst付いてないよ >>986
で、そのリンクリストがパフォーマンス的に勝るデータ量はおいくらだと思ってる?
大きめの画像くらいのサイズならデータの中央に挿入するとき、リンクをたどって挿入するより再確保、再配置した方がシーケンシャルアクセスになるから早いからな
ハードウェアの特性によりシーケンシャルなコピーは相当速いためPythonで一般的に扱う問題では挿入だろうが何だろうがリンクリストが勝ることはまずない よくリストの特定位置に挿入を繰り返してリンクリストの方が速いというベンチマークがあるけど、あれもほとんど詐欺なんだよな
動的配列に多数の要素を挿入するなら挿入する要素数分ブロックコピーでずらしてから空けた隙間に書き込むだけだからリンクリストより圧倒的に速い
予め要素数が分からない場合は、いったん別の動的配列に追加していってから纏めて挿入すればよい >>994
>再確保、再配置
ここ c++ だよね
再配置というのはコピーコンストラクタが働く、てことだよね
挿入のたびにコピーコンストラクタが動くなんて馬鹿のやることだ、という常識が通用するところだよね >>995
>ブロックコピーでずらしてから
ユーザーによるコピーコンストラクタが定義されていたら「それだけでは済まない」のでは? ユーザーが勝手に遅くすることは関係の無い話だ
その場合リストを使えばいいのでは コピーが嫌なら別途ポインタの動的配列を持てばよい
それでもリンクリストよりは速いわ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 16時間 29分 4秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。