C++相談室 part139

レス数が1000を超えています。これ以上書き込みはできません。
2018/10/06(土) 00:59:48.54ID:CdYUXXMG0
次スレを立てる時は本文の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
2019/01/11(金) 14:50:24.94ID:e7J07k250
std::getは固定長コンテナなら何でも使えるぞ
std::pairでもstd::arrayでも生配列でも
2019/01/11(金) 15:52:17.33ID:uZGQy9uP0
>>949
std::getにすることによってテンプレート引数にtupleと見なせる型(pair,array)を使うことができるようにしたいからそうなっている
2019/01/11(金) 15:56:06.33ID:uZGQy9uP0
ちなみにstd::getのユーザーによる特殊化は次から禁止される予定です
2019/01/11(金) 17:29:27.31ID:qkp6ca1e0
ポリモーフィズムを使っていて、ダウンキャストを行うときって
dynamic_castをしてみてnullptrかどうかを判断するのがベストな手順なんですか?
RTTIから実際の型情報を引っ張ってくる手段はないものでしょうか
2019/01/11(金) 18:21:19.24ID:3LH9+DohM
>>955
もちできるけど、検査したい型を継承した型を渡されたら動かないよ?
2019/01/11(金) 19:17:46.71ID:KlFqADLA0
>>955
それこそポリモーフィズムで派生クラスのthisを直でもらえばいいんじゃないの
958デフォルトの名無しさん (ワッチョイ 4ea0-N8Dk)
垢版 |
2019/01/11(金) 19:25:12.52ID:QV4rGvMY0
>>955
typeid で type_info 取れるよ。
基底クラスにenum Type 等を持たせてswitchも手の一つ。
処理内容によってはvisitor パターンが使える。俺が知ってるのはこれくらい。
2019/01/11(金) 20:46:28.26ID:e7J07k250
まず、なるべくダウンキャストなんか必要ないようにするのが最初だけどな
2019/01/11(金) 20:50:53.28ID:uZGQy9uP0
ダウンキャスト使わないのがベスト
2019/01/11(金) 21:13:21.95ID:ymL5E9Q60
>>955
ダウンキャストが必要になるなら、選択はそれしかない
2019/01/11(金) 22:23:52.97ID:jxLB4o2EM
>>955
ダウンキャストしたいんだよね?
なんで実際の型情報なんかを欲しがる理由がわからん
963デフォルトの名無しさん (ワッチョイ dd01-RNo8)
垢版 |
2019/01/11(金) 23:12:06.09ID:TUR+WyZ10
カミカゼキャストについて教えてください。
不意にフレーズが浮かんだのです。
2019/01/12(土) 00:03:01.76ID:i0P8FrwoM
SOLID守ってんのかよちゃんと
965デフォルトの名無しさん (ワッチョイ 4ea0-N8Dk)
垢版 |
2019/01/12(土) 01:42:52.85ID:Cfay/yS40
dynamic_castでnullptrなりbad-cast拾うのはお勧めできない。
2019/01/12(土) 01:53:56.64ID:ygc4MJ1X0
>>965
nullptrでキャスト可否を確認するのは普通の使い方だろ…
2019/01/12(土) 01:57:02.82ID:WnhdkTsC0
cならともかくc++でキャストが必要になるのはどっかやばいことになってる可能性を考えた方がいい
2019/01/12(土) 03:58:57.87ID:xRzP6oFDa
ライブラリの関数の引数が非constのchar配列で渡したい文字列がstd::stringに入ってるとき
.c_str()をconst_castしてるけどあかんの
2019/01/12(土) 04:35:25.22ID:vq0ymgcL0
opencvを使用して画像処理を行ってるんですが画像データにAWGNを加える方法が分かりません
グレースケール化させて処理をしています
乱数生成などは理解しているんですがその乱数を使ってどのような値として輝度値に影響させるのかが分かってません
よろしくお願いします
visual c++を使用しています
2019/01/12(土) 04:53:59.45ID:vq0ymgcL0
>>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がノイズ画像です
2019/01/12(土) 04:55:24.88ID:k4bgy+v70
画像処理のことなんか知らん
2019/01/12(土) 05:30:28.09ID:DxcCYmak0
>>955
RTTIから実際の型情報を引っ張ってくる手段というとtypeidだね
void func(ios_base* ptr)
{
if(typeid(*ptr) == typeid(istream) { /* ... */ }
if(typeid(*ptr) == typeid(ostream) { /* ... */ }
}
2019/01/12(土) 08:53:04.29ID:Ma3Bi+e40
>>968
非constのchar配列を要求するという事は書き換えられる可能性がある
逆にconst付でchar配列を返す方は書き換えないという前提で渡してる
面倒だけどコピーしてから渡すべき
2019/01/12(土) 09:04:15.07ID:VES9RvQbM
>>973
さすがに神経質すぎる
そのライブラリの関数が文字列を書き換えない仕様なんだったら信用すればよい
そんなこと言い出したら何一つ信用できなくなってプログラムなんか書けん
2019/01/12(土) 09:10:15.98ID:Ma3Bi+e40
>>974
書き換えない、という仕様なら最初からconstを要求すればいいだけのこと
constを要求していない以上書き換えられる可能性を考慮するのは当たり前の前提
976デフォルトの名無しさん (ワッチョイ a57d-VK1S)
垢版 |
2019/01/12(土) 09:12:16.23ID:iREAiCU50
constついてないってことは内部で書き換えるという明確な意思表示だろ
2019/01/12(土) 09:29:29.58ID:VES9RvQbM
Cのライブラリに依存してるとか普通にあるだろ
2019/01/12(土) 09:31:51.80ID:VES9RvQbM
あと、ライブラリを作った奴のスキルの問題でconstを付けるべきときに付いてないのも仕事でやってりゃ普通にあるぞ
2019/01/12(土) 09:34:33.47ID:Ma3Bi+e40
Cのライブラリに渡すのならなおらstd::stringの内部配列を渡すべきでないし
そのようなスキルの低い作者の作ったライブラリの何を信用しろと言われるのか
2019/01/12(土) 09:35:58.84ID:VES9RvQbM
Cに一切ポインタ渡すなって?
凄いこと言うなあ
2019/01/12(土) 10:17:58.63ID:D4HU0Own0
なにもそう煽らなくても
現場の人間か責任を負う立場の人間かで意見も異なるのがわかるだろうに
2019/01/12(土) 10:56:59.61ID:Fa1DhIVTa
責任を負う立場の人間がconstがどうのなんて気にするわけないでしょw
「契約相手がそう言ってるなら信用すればよい。違っていたら相手の責任だ。」で終わりだよ
2019/01/12(土) 11:23:34.77ID:WnhdkTsC0
まあ契約でそうなってても残業するのは作業者だからな。。
バカの言うことなんて信用しないで安全に倒した方が正解だわ。
984デフォルトの名無しさん (スップ Sd7a-9pEX)
垢版 |
2019/01/12(土) 11:34:06.80ID:JcHNo1aqd
constは付いてないですけど内部で書き換えはしません
なんて仕様書に書いてあるのか
2019/01/12(土) 12:01:03.58ID:VES9RvQbM
void displayText(char* text);
文字列を表示します
text : 表示する文字列

これが仮にtextを書き換えてしまうとして、それをコピーで回避できたとしても、
そんなレベルのゴミがまともに機能するとは到底思えん
そんなことを言い出したらキリがない
2019/01/12(土) 12:48:58.54ID:d9Np0YH50
>>942
1. 要素数を N としたとき、1つの要素の処理に要する時間が O(N) になるか、
  O(1) などの違いなので、本質的にハードがいくら良くなっても解決する
  問題ではない。O(N) のアルゴリズムは、N が大きくなった場合には、
  ハードの良さを台無しにしてしまう。なので、アルゴリズムの選定はとても
  重要。

2. 動的配列でも、配列の最後に追加する場合は、リンクリストと遜色ない速度は
  出る可能性は十分あるが、配列の途中に追加する場合は、宇宙人でも無理。

3. 逆に、リンクリストの場合は、先頭から数えて、「k 番目の要素」にランダム
  にアクセスすることを高速化することは、宇宙人でも無理。

4. 「宇宙人でも無理」の意味が理解できるためには、数学的感性が必要。
  理解できない人には理解できないかもしれない。
2019/01/12(土) 13:04:53.68ID:VES9RvQbM
>>986
問題は、リンクリストの途中に挿入したいとき、予め挿入位置の直前や直後のノードへのポインタを持っていなければならないことだ
そんなケースは現実の開発において殆ど無い
持っていなければ挿入位置に辿り着くまでにO(N)のシーケンシャルアクセスが発生する
そして、リンクリストはメモリアクセスの局所性が欠片もないデータ構造であり、
動的配列と比較してシーケンシャルアクセスのパフォーマンスは極めて劣悪である
2019/01/12(土) 13:27:37.63ID:xzy8SRaPM
テキストエディタのバッファ管理なんてのが
そのケースなんですけどね
2019/01/12(土) 13:33:01.95ID:VES9RvQbM
>>988
うん。レアケースだね。
2019/01/12(土) 13:34:27.13ID:xzy8SRaPM
我田引水の基地と判明
991デフォルトの名無しさん (ワッチョイ 4ea0-N8Dk)
垢版 |
2019/01/12(土) 13:40:34.57ID:Cfay/yS40
>>968
あかん。データを壊したくなかったら、別途コピーしたものを渡すべき。
2019/01/12(土) 13:44:47.40ID:7KwgHC6s0
そろそろ次スレ
2019/01/12(土) 14:46:05.16ID:k4bgy+v70
俺の上司とかconstって何?よけいなもんつけんなっていうおじさんだから内政のライブラリは参照でもconst付いてないよ
2019/01/12(土) 15:06:09.76ID:k4bgy+v70
>>986
で、そのリンクリストがパフォーマンス的に勝るデータ量はおいくらだと思ってる?
大きめの画像くらいのサイズならデータの中央に挿入するとき、リンクをたどって挿入するより再確保、再配置した方がシーケンシャルアクセスになるから早いからな
ハードウェアの特性によりシーケンシャルなコピーは相当速いためPythonで一般的に扱う問題では挿入だろうが何だろうがリンクリストが勝ることはまずない
2019/01/12(土) 15:20:37.52ID:T5Trh1u0M
よくリストの特定位置に挿入を繰り返してリンクリストの方が速いというベンチマークがあるけど、あれもほとんど詐欺なんだよな
動的配列に多数の要素を挿入するなら挿入する要素数分ブロックコピーでずらしてから空けた隙間に書き込むだけだからリンクリストより圧倒的に速い
予め要素数が分からない場合は、いったん別の動的配列に追加していってから纏めて挿入すればよい
2019/01/12(土) 15:20:48.59ID:yBCTPneO0
>>994
>再確保、再配置
ここ c++ だよね
再配置というのはコピーコンストラクタが働く、てことだよね
挿入のたびにコピーコンストラクタが動くなんて馬鹿のやることだ、という常識が通用するところだよね
2019/01/12(土) 15:21:48.44ID:yBCTPneO0
>>995
>ブロックコピーでずらしてから
ユーザーによるコピーコンストラクタが定義されていたら「それだけでは済まない」のでは?
2019/01/12(土) 15:42:46.28ID:k4bgy+v70
ユーザーが勝手に遅くすることは関係の無い話だ
その場合リストを使えばいいのでは
2019/01/12(土) 16:00:10.74ID:iezJoARlM
コピーが嫌なら別途ポインタの動的配列を持てばよい
それでもリンクリストよりは速いわ
2019/01/12(土) 17:28:52.24ID:xSSM7u+V0
リストに親でも殺されたのか? w
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 16時間 29分 4秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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