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
■ このスレッドは過去ログ倉庫に格納されています
2020/05/14(木) 11:53:25.59ID:ZPCfyTux
373デフォルトの名無しさん
2020/06/14(日) 20:05:56.73ID:VVffaeyk じゃあエレクトロンで作るよ
374デフォルトの名無しさん
2020/06/14(日) 20:21:24.84ID:irom8koH その場合は、もしかしたらWEBGLかもしれんな。
375デフォルトの名無しさん
2020/06/14(日) 20:33:14.43ID:VVffaeyk 大事ナノは結局ロジックだと思うので(´・ω・`)速度とか考えずにやります
376デフォルトの名無しさん
2020/06/14(日) 21:07:35.45ID:ZstiKk82 UE4はC++なので、ゲームを仕事にしたいなら、C++は使えた方がいい。
unityもスマホゲーや小規模開発でシェア大きいので、Unityで使うC#もやっておこう。
つまり、C#とC++両方を当然に使えるようになるべき。
趣味で作りたいだけなら、資料の多いunityでも、最近VE5の発表で熱いUE4でも、好きな方やればよい。
グラフィックエンジニアやりたいなら、DirectX12やVulcanにてをだしてもよいかもしれない。茨の道だがね
unityもスマホゲーや小規模開発でシェア大きいので、Unityで使うC#もやっておこう。
つまり、C#とC++両方を当然に使えるようになるべき。
趣味で作りたいだけなら、資料の多いunityでも、最近VE5の発表で熱いUE4でも、好きな方やればよい。
グラフィックエンジニアやりたいなら、DirectX12やVulcanにてをだしてもよいかもしれない。茨の道だがね
377デフォルトの名無しさん
2020/06/14(日) 22:02:31.10ID:kf4Cc+ef378デフォルトの名無しさん
2020/06/14(日) 22:11:34.75ID:ye8ce71J >>365
だから、あなたみたいなGC言語に慣れた人が多くなって、C++の本質が理解出来て
無くて RAIIなどといい始めたんだ。
ちがうんだよ、本来のデストラクタの主目的は。
デストラクタの中には、pure C の free() のように、本質的にはどんな場合に
呼び出しても失敗することが無いような関数だけを書くことが基本。
それを昇華すれば、deleteを書いても、絶対に失敗しないことになる。
これは数学的帰納法を理解できない人に入っている意味が分からないと思うが。
とにかく、デストラクタの役割も作られた目的も、メモリの安全な解放だったの
であって、リソースの開放のためでは無いので、リソースの解放をデストラクタ
の中に書くというのはさまざまな問題を生む。
だから、あなたみたいなGC言語に慣れた人が多くなって、C++の本質が理解出来て
無くて RAIIなどといい始めたんだ。
ちがうんだよ、本来のデストラクタの主目的は。
デストラクタの中には、pure C の free() のように、本質的にはどんな場合に
呼び出しても失敗することが無いような関数だけを書くことが基本。
それを昇華すれば、deleteを書いても、絶対に失敗しないことになる。
これは数学的帰納法を理解できない人に入っている意味が分からないと思うが。
とにかく、デストラクタの役割も作られた目的も、メモリの安全な解放だったの
であって、リソースの開放のためでは無いので、リソースの解放をデストラクタ
の中に書くというのはさまざまな問題を生む。
379デフォルトの名無しさん
2020/06/14(日) 22:29:21.16ID:ye8ce71J >>365
>資源のように解放するタイミングが比較的重要なものこそデストラクタが向いているだろう。
少なくとも初期のころのC++は、そのようなことがデストラクタの主目的ではなかった。
今、GCでやっていることが効率が悪いことを見越して、かつ、メモリー安全性を確保するために
発明されたのがデストラクタだ。
数日前にも、ファイルハンドルなどのリソースをRAIIを使ってデストラクタで閉じようとすると、
失敗した時に対処できなくなるという非常に難しい問題が生じることが議論されていた。
メッセージボックスさえ出すことができないかも知れないのだ。
メッセージボックスを出そうとすることがむしろ仇となって、その瞬間に大切なデータが保存できて無い
アプリもろともダウンしてしまう可能性がある。
なぜそういうことがおきるかというと、もともと、デストラクタは、失敗する関数をそこに
含めることを想定していなかったからだ。
>資源のように解放するタイミングが比較的重要なものこそデストラクタが向いているだろう。
少なくとも初期のころのC++は、そのようなことがデストラクタの主目的ではなかった。
今、GCでやっていることが効率が悪いことを見越して、かつ、メモリー安全性を確保するために
発明されたのがデストラクタだ。
数日前にも、ファイルハンドルなどのリソースをRAIIを使ってデストラクタで閉じようとすると、
失敗した時に対処できなくなるという非常に難しい問題が生じることが議論されていた。
メッセージボックスさえ出すことができないかも知れないのだ。
メッセージボックスを出そうとすることがむしろ仇となって、その瞬間に大切なデータが保存できて無い
アプリもろともダウンしてしまう可能性がある。
なぜそういうことがおきるかというと、もともと、デストラクタは、失敗する関数をそこに
含めることを想定していなかったからだ。
380デフォルトの名無しさん
2020/06/14(日) 22:37:05.85ID:OGb6Unub >C++の本質が理解出来て無くて RAIIなどといい始めたんだ。
RAIIって20世紀の頃の禿のお言葉なんだがw
RAIIって20世紀の頃の禿のお言葉なんだがw
381デフォルトの名無しさん
2020/06/14(日) 22:52:30.07ID:ye8ce71J Bjarne Stroustrup 氏の事を禿と言ってしまう人の人間性を疑う。
名前が覚えられないのか。
名前が覚えられないのか。
382デフォルトの名無しさん
2020/06/14(日) 22:54:20.28ID:aLpfCXag あら議論から逃げよったわw
383デフォルトの名無しさん
2020/06/14(日) 22:58:03.93ID:MuaS91+w 妙だな? 誰も禿をびよーねとは言っていないのに・・・
384デフォルトの名無しさん
2020/06/14(日) 23:03:05.44ID:PqSUj3Py385デフォルトの名無しさん
2020/06/14(日) 23:04:20.52ID:ye8ce71J まあ、RAIIが、20世紀に考え出されていたのであれば、それはそれで良しとしよう。
でも、彼の頭の中でどうであったとせよ、当時の本を見れば、デストラクタの
説明としてほぼ必ずと言って、メモリ解放のために用いる例が書かれていたのだから、
C++を実用的な観点で見た時にデストラクタの一番の使い道はメモリ解放であった
ことは疑いの無い事実だろう。
でも、彼の頭の中でどうであったとせよ、当時の本を見れば、デストラクタの
説明としてほぼ必ずと言って、メモリ解放のために用いる例が書かれていたのだから、
C++を実用的な観点で見た時にデストラクタの一番の使い道はメモリ解放であった
ことは疑いの無い事実だろう。
386デフォルトの名無しさん
2020/06/14(日) 23:09:16.33ID:hr1wykPX387デフォルトの名無しさん
2020/06/14(日) 23:13:56.65ID:OGb6Unub388246
2020/06/14(日) 23:28:20.22ID:qmm3PCBI389デフォルトの名無しさん
2020/06/14(日) 23:32:05.30ID:iYtMGgBJ >>387
英語じゃねーか、日本語で書けよ。
英語じゃねーか、日本語で書けよ。
390デフォルトの名無しさん
2020/06/14(日) 23:57:28.27ID:ye8ce71J アメリカ人は馬鹿だから参考にならない。
彼らのために世界中の生産性が下がっている。
彼らのために世界中の生産性が下がっている。
391デフォルトの名無しさん
2020/06/15(月) 00:10:53.34ID:Bn8xL7m+ 禿先生はデンマーク人だぞ
392デフォルトの名無しさん
2020/06/15(月) 00:13:02.53ID:1aJEphkT >>389
王者の気品とか言っちゃう奴の日本語よりはまともな人の書いた英語の方が遥かに読みやすいし、内容の価値は比べるまでもないw
王者の気品とか言っちゃう奴の日本語よりはまともな人の書いた英語の方が遥かに読みやすいし、内容の価値は比べるまでもないw
393デフォルトの名無しさん
2020/06/15(月) 00:23:21.40ID:94IDrwxi 以上、本日のASDLおじいちゃん演説会でした
394デフォルトの名無しさん
2020/06/15(月) 00:56:17.21ID:Hw5ljvB7 で、本物のC++はどうやったら食べられるのですか
395デフォルトの名無しさん
2020/06/15(月) 02:02:25.91ID:oHOmQwtH ドラえもんの暗記パンで
396デフォルトの名無しさん
2020/06/15(月) 04:52:38.04ID:1aJEphkT397デフォルトの名無しさん
2020/06/15(月) 09:43:39.22ID:Q9IHrxmr std::listやvector,map,unordered_mapなどのコンテナのイテレータについての質問です
コンテナのある要素を指すイテレータを保存してるときに、
そのコンテナに対して変更が加えられたとき、保存したイテレータは有効なのでしょうか??
例えば、元の要素が削除されたら、無効になるのは想像つきます
例えば、前後に別の要素が追加されたら、保存したイテレータは元の同じ要素を指してる保証はあるのでしょうか??
std::listはリンクリストなので、前後に要素を追加されても影響受けなさそうですが?
std::vectorはインデックスで管理してるとダメそう?
std::mapは?
コンテナのある要素を指すイテレータを保存してるときに、
そのコンテナに対して変更が加えられたとき、保存したイテレータは有効なのでしょうか??
例えば、元の要素が削除されたら、無効になるのは想像つきます
例えば、前後に別の要素が追加されたら、保存したイテレータは元の同じ要素を指してる保証はあるのでしょうか??
std::listはリンクリストなので、前後に要素を追加されても影響受けなさそうですが?
std::vectorはインデックスで管理してるとダメそう?
std::mapは?
398デフォルトの名無しさん
2020/06/15(月) 10:08:43.12ID:w4yns3wG イテレータが無効になる場合はコンテナの種類と操作によって決まっているのでまともな解説にはちゃんと書いてある。
例えばvectorのinsert()はストレージの再確保が行われなければinsertした場所より前の要素を指すイテレータは無効にならないといった具合。
例えばvectorのinsert()はストレージの再確保が行われなければinsertした場所より前の要素を指すイテレータは無効にならないといった具合。
399デフォルトの名無しさん
2020/06/15(月) 10:13:02.37ID:Q9IHrxmr400デフォルトの名無しさん
2020/06/15(月) 12:16:11.97ID:LBP04AxD401デフォルトの名無しさん
2020/06/15(月) 14:06:35.72ID:iqqqiJ5Y デストラクタで例外を出す可能性があるクラス Hoge について
---- A.cpp
Hoge hoge;
int main(int argc, char **argv)
{
// hoge を使う
return 0;
}
---- A.cpp ここまで
---- B.cpp
int main(int argc, char **argv)
{
Hoge hoge;
// hoge を使う
return 0;
}
---- B.cpp ここまで
B だと例外補足されるというか表示されるけど
A だと握り潰されてプロセス終了する(例外出てても気付けない)?
---- A.cpp
Hoge hoge;
int main(int argc, char **argv)
{
// hoge を使う
return 0;
}
---- A.cpp ここまで
---- B.cpp
int main(int argc, char **argv)
{
Hoge hoge;
// hoge を使う
return 0;
}
---- B.cpp ここまで
B だと例外補足されるというか表示されるけど
A だと握り潰されてプロセス終了する(例外出てても気付けない)?
402デフォルトの名無しさん
2020/06/15(月) 14:12:45.65ID:+GKLccgq はちみつ餃子 さまを筆頭とする方々にお答えしていただけることを期待しております。
std::forward()がどうやって実装されているかを調べるため、
MSのオープンソースのSTLのソースの「STL-master」の中の type_traits
というのを見ていたのですが、仕組みが完全には分かりません。
以下の1つ目のforwrd()は、左辺値参照で受け取るまでは分かりそうなのですが、
その後、return static_cast<_Ty&&>(_Arg) としているのに、結果は、左辺値に
なっていなければ、forward()の使用に合わないはずですが、なぜ、
右辺値参照にcastしているのに、左辺値参照のままなのでしょうか?
/* 左辺値を受け取る forward() のテンプレートらしいですが、
_Arg が左辺値参照ならば(?)、static_cast<_Ty&&>(_Arg)
と cast しても、右辺値参照になるとるは限らない??? */
template <class _Ty>
_NODISCARD constexpr _Ty&& forward(
remove_reference_t<_Ty>& _Arg) noexcept { // forward an lvalue as either an lvalue or an rvalue
return static_cast<_Ty&&>(_Arg);
}
// 右辺値を受け取る forward() のテンプレートらしいです :
template <class _Ty>
_NODISCARD constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue
static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call");
return static_cast<_Ty&&>(_Arg);
}
template <class _Ty>
_NODISCARD constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept { // forward _Arg as movable
return static_cast<remove_reference_t<_Ty>&&>(_Arg);
}
std::forward()がどうやって実装されているかを調べるため、
MSのオープンソースのSTLのソースの「STL-master」の中の type_traits
というのを見ていたのですが、仕組みが完全には分かりません。
以下の1つ目のforwrd()は、左辺値参照で受け取るまでは分かりそうなのですが、
その後、return static_cast<_Ty&&>(_Arg) としているのに、結果は、左辺値に
なっていなければ、forward()の使用に合わないはずですが、なぜ、
右辺値参照にcastしているのに、左辺値参照のままなのでしょうか?
/* 左辺値を受け取る forward() のテンプレートらしいですが、
_Arg が左辺値参照ならば(?)、static_cast<_Ty&&>(_Arg)
と cast しても、右辺値参照になるとるは限らない??? */
template <class _Ty>
_NODISCARD constexpr _Ty&& forward(
remove_reference_t<_Ty>& _Arg) noexcept { // forward an lvalue as either an lvalue or an rvalue
return static_cast<_Ty&&>(_Arg);
}
// 右辺値を受け取る forward() のテンプレートらしいです :
template <class _Ty>
_NODISCARD constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue
static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call");
return static_cast<_Ty&&>(_Arg);
}
template <class _Ty>
_NODISCARD constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept { // forward _Arg as movable
return static_cast<remove_reference_t<_Ty>&&>(_Arg);
}
403はちみつ餃子 ◆8X2XSCHEME
2020/06/15(月) 14:46:55.44ID:WVo0Ka65 >>402
正確なルールを説明するとなると長くなる (というか私もそんなに入り組んだところまで把握してない) んだが、
「参照の参照」を作った時に調整されるルール reference collapsing によるものだと思う。
左辺値参照から右辺値参照を作ろうとしたときには左辺値参照に調整される。
正確なルールを説明するとなると長くなる (というか私もそんなに入り組んだところまで把握してない) んだが、
「参照の参照」を作った時に調整されるルール reference collapsing によるものだと思う。
左辺値参照から右辺値参照を作ろうとしたときには左辺値参照に調整される。
404デフォルトの名無しさん
2020/06/15(月) 15:04:09.59ID:+GKLccgq >>403
回答有難うございます。
一生懸命調べたところ、こんな記述を見つけました。Tがオブジェクト型の場合、(T &&)x のように cast すると、
結果は、右辺値にならずに xvalueになるようです。
でもそこから先は理解できてません。
https://stackoverflow.com/questions/40801765/is-it-an-rvalue-or-lvalue-after-a-cast
From expr.cast (this is applicable from C++11 and later)
C++ 11 以後の場合 :
The result of the expression (T) cast-expression is of type T.
式「(T)cast-expression」の結果は、T 型である。
The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;
Tが関数型への左辺値参照/右辺値参照の場合は、結果は 左辺値で、
Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。
otherwise the result is a prvalue.
そのどちらでも無い場合、結果は、prvalue である。
回答有難うございます。
一生懸命調べたところ、こんな記述を見つけました。Tがオブジェクト型の場合、(T &&)x のように cast すると、
結果は、右辺値にならずに xvalueになるようです。
でもそこから先は理解できてません。
https://stackoverflow.com/questions/40801765/is-it-an-rvalue-or-lvalue-after-a-cast
From expr.cast (this is applicable from C++11 and later)
C++ 11 以後の場合 :
The result of the expression (T) cast-expression is of type T.
式「(T)cast-expression」の結果は、T 型である。
The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;
Tが関数型への左辺値参照/右辺値参照の場合は、結果は 左辺値で、
Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。
otherwise the result is a prvalue.
そのどちらでも無い場合、結果は、prvalue である。
405デフォルトの名無しさん
2020/06/15(月) 15:11:00.42ID:UmY/I/0X406デフォルトの名無しさん
2020/06/15(月) 15:15:51.75ID:kn0xQdMp より詳しい説明が出るのは役に立つんだから別にいいだろ
それよりもはちみつごときに様つけたりここの住人の筆頭にするな
それよりもはちみつごときに様つけたりここの住人の筆頭にするな
408デフォルトの名無しさん
2020/06/15(月) 16:19:05.98ID:+GKLccgq >>407
lvalue, xvalue, prvalue は排反集合なのですが、
glvalueとrvalueは、正確に
#define IS_GLVALUE(X) (IS_LVALUE(X) || IS_XVALUE(X)) // glvalue は、lvalue と xvalue の和集合
#define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合
なので、rvalueであっても、xvalueで無い場合がありえます。
それは、prvalueです。
lvalue, xvalue, prvalue は排反集合なのですが、
glvalueとrvalueは、正確に
#define IS_GLVALUE(X) (IS_LVALUE(X) || IS_XVALUE(X)) // glvalue は、lvalue と xvalue の和集合
#define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合
なので、rvalueであっても、xvalueで無い場合がありえます。
それは、prvalueです。
409デフォルトの名無しさん
2020/06/15(月) 16:32:37.00ID:+GKLccgq410デフォルトの名無しさん
2020/06/15(月) 17:00:27.16ID:+GKLccgq >>408
>なので、rvalueであっても、xvalueで無い場合がありえます。
このことは、正しいのですが、
#define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合
によれば、
xvalueであれば 必ず rvalue ではあるので、
「xvalue は rvalue の一種」
という命題は必ず真で、はちみつ餃子さんのおっしゃっていることは正しいと思います。
rvalueが動物、xvalueが犬、であるような関係になります。
動物(rvalue)であっても犬(xvalue)で無い場合がありえますが、
犬(xvalue)であれば必ず動物(rvalue)であり、犬(xvalue)は動物(rvalue)の一種です。
>なので、rvalueであっても、xvalueで無い場合がありえます。
このことは、正しいのですが、
#define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合
によれば、
xvalueであれば 必ず rvalue ではあるので、
「xvalue は rvalue の一種」
という命題は必ず真で、はちみつ餃子さんのおっしゃっていることは正しいと思います。
rvalueが動物、xvalueが犬、であるような関係になります。
動物(rvalue)であっても犬(xvalue)で無い場合がありえますが、
犬(xvalue)であれば必ず動物(rvalue)であり、犬(xvalue)は動物(rvalue)の一種です。
411デフォルトの名無しさん
2020/06/15(月) 17:03:05.14ID:+GKLccgq 「xvalue は rvalue の一種」でもあり、
「xvalue は glvalue の一種」でもあるのですね。
「xvalue は glvalue の一種」でもあるのですね。
412はちみつ餃子 ◆8X2XSCHEME
2020/06/15(月) 17:11:13.40ID:WVo0Ka65 >>405
疑問が深まったら掘り下げるのは別にいいんじゃね。 根拠も提示されてるし。
>>409
ワイは趣味プログラマやで。
実務家が言語仕様の詳細に興味がないのもよくあることなので、
プロのプログラマが仕様に詳しいとは限らんけど、
平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。
>>408
あれっ、そうか。 カテゴリに関しては俺の間違い。
で結局は >>403 で述べた通り reference collapsing が適用されるってだけだと思う。
https://timsong-cpp.github.io/cppwp/n3337/dcl.ref#6
疑問が深まったら掘り下げるのは別にいいんじゃね。 根拠も提示されてるし。
>>409
ワイは趣味プログラマやで。
実務家が言語仕様の詳細に興味がないのもよくあることなので、
プロのプログラマが仕様に詳しいとは限らんけど、
平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。
>>408
あれっ、そうか。 カテゴリに関しては俺の間違い。
で結局は >>403 で述べた通り reference collapsing が適用されるってだけだと思う。
https://timsong-cpp.github.io/cppwp/n3337/dcl.ref#6
413はちみつ餃子 ◆8X2XSCHEME
2020/06/15(月) 17:18:57.93ID:WVo0Ka65 いや、なんか違う気もしてきた。
わかんね。
わかんね。
414デフォルトの名無しさん
2020/06/15(月) 18:34:21.52ID:+GKLccgq >>412
>平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。
C++は、何十年も前に既に完成している言語なので、実態はわかりませんが、仕事をC++を使っている人でも、はちみつ餃子さんのようには新しい仕様を知らない人の方が多いのではないかと思うのです。
>平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。
C++は、何十年も前に既に完成している言語なので、実態はわかりませんが、仕事をC++を使っている人でも、はちみつ餃子さんのようには新しい仕様を知らない人の方が多いのではないかと思うのです。
415デフォルトの名無しさん
2020/06/15(月) 20:04:29.90ID:fMEeoq9p はちみつ餃子 さまを筆頭とするはちみつ餃子さまにお答えしていただけることを期待しております。
普段どんな仕事をしてるの?
普段どんな仕事をしてるの?
416デフォルトの名無しさん
2020/06/15(月) 20:05:26.73ID:+GKLccgq >>404 の
「The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;」
の部分の訳が一部間違っていて、正しくは、
「Tが左辺値参照型か、または、関数型への右辺値参照の場合は、結果は 左辺値で、
Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。」
ということのようです。
結果として、>>402 の return 文のオペランドの
static_cast<_Ty&&>(_Arg)
の部分は、
1. _Argの型が左辺値参照型の場合、左辺値(i & !m)
2. _Argの型が右辺値参照型の場合、xvalue(右辺値の一種, i & m)
となるようです。
「The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;」
の部分の訳が一部間違っていて、正しくは、
「Tが左辺値参照型か、または、関数型への右辺値参照の場合は、結果は 左辺値で、
Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。」
ということのようです。
結果として、>>402 の return 文のオペランドの
static_cast<_Ty&&>(_Arg)
の部分は、
1. _Argの型が左辺値参照型の場合、左辺値(i & !m)
2. _Argの型が右辺値参照型の場合、xvalue(右辺値の一種, i & m)
となるようです。
417デフォルトの名無しさん
2020/06/15(月) 20:13:24.30ID:ZNXm/M6v 自分のレスにレス返すスタイルなんなの
自分の日記帳でやれよ
自分の日記帳でやれよ
418デフォルトの名無しさん
2020/06/15(月) 20:48:28.91ID:hnmQwUn9 これ前の人だよね
419デフォルトの名無しさん
2020/06/15(月) 21:31:20.35ID:bSwpQKjB 結局答えられないんですねの人?
420デフォルトの名無しさん
2020/06/15(月) 21:44:07.48ID:Q9IHrxmr また、質問します。
アプリでunordered_mapやunordered_setのコンテナ10個くらい使うのですが問題はキーの型が可変長でstd::stringで結構長いことです
具体的にはキーはファイルパスとかになるのですが
で、頻繁にコンテナを使用します
ファイラーみたいなアプリを想定して
このとき、キーをstringにするとコピーなどのオーバーヘッドが発生?すると思いますがさすがにこのレベルは気にした方がよい?
アプリでunordered_mapやunordered_setのコンテナ10個くらい使うのですが問題はキーの型が可変長でstd::stringで結構長いことです
具体的にはキーはファイルパスとかになるのですが
で、頻繁にコンテナを使用します
ファイラーみたいなアプリを想定して
このとき、キーをstringにするとコピーなどのオーバーヘッドが発生?すると思いますがさすがにこのレベルは気にした方がよい?
421デフォルトの名無しさん
2020/06/15(月) 21:48:49.59ID:Q9IHrxmr ユーザーがカレントフォルダ移動したり、ファイル一覧のリストビューをスクロールするだけで走ります
で、きにする場合はキーをstd::shated_ptrでくるめばいいんですかね?他に方法ありますでしょうか?
で、きにする場合はキーをstd::shated_ptrでくるめばいいんですかね?他に方法ありますでしょうか?
422デフォルトの名無しさん
2020/06/15(月) 22:01:06.47ID:LBP04AxD >>420 効率は実測が基本。
423デフォルトの名無しさん
2020/06/15(月) 22:17:50.72ID:Bn8xL7m+ 100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く)
そのファイラーが糞重いんだったら原因はそこじゃないと思うぞ
そのファイラーが糞重いんだったら原因はそこじゃないと思うぞ
424デフォルトの名無しさん
2020/06/15(月) 22:52:38.98ID:Q9IHrxmr ありがとうございます
>>422の言う通り最終的は実測でしょうが、キーをstringにしたときのキーのメモリコピーのオーバーヘッドを気にしてました
が、よく考えてみますと実際にキーのコピーが発生するのは実際に要素を挿入するとき1回だけっぽいですね
findメソッドやcountでキーを渡しますがキーを参照で渡しますし、hash関数も参照でキーの値を受けとりますし
>>422の言う通り最終的は実測でしょうが、キーをstringにしたときのキーのメモリコピーのオーバーヘッドを気にしてました
が、よく考えてみますと実際にキーのコピーが発生するのは実際に要素を挿入するとき1回だけっぽいですね
findメソッドやcountでキーを渡しますがキーを参照で渡しますし、hash関数も参照でキーの値を受けとりますし
425デフォルトの名無しさん
2020/06/15(月) 23:00:46.83ID:Q9IHrxmr キーのコピーの頻度そこら辺を想像したことなかったので、びびってましたがびびる必要なかったぽいですね
ということ、普通にstringをキーに実装してみます
ということ、普通にstringをキーに実装してみます
426はちみつ餃子 ◆8X2XSCHEME
2020/06/15(月) 23:00:50.65ID:WVo0Ka65 >>424
string はムーブ対応してるんで所有権を渡してしまうなら文字列全体のコピーはしないよ。
string はムーブ対応してるんで所有権を渡してしまうなら文字列全体のコピーはしないよ。
427デフォルトの名無しさん
2020/06/15(月) 23:12:46.11ID:Q9IHrxmr >>426
なるほど、findやcountの場合はキーの値を実際にコピーする必要ないから、&&の引数のオーバーロードはないが、insertの場合は&&の引数で、所有権移せるバージョンもあるんですね
なるほど、findやcountの場合はキーの値を実際にコピーする必要ないから、&&の引数のオーバーロードはないが、insertの場合は&&の引数で、所有権移せるバージョンもあるんですね
428デフォルトの名無しさん
2020/06/15(月) 23:14:22.14ID:hnmQwUn9 この人がどうかは知らないけど
スクリプト言語あがりはstring + mapばっか使うんだよね
万能さはわかるけどさ
それで効率が〜とか
どうなのそれw
スクリプト言語あがりはstring + mapばっか使うんだよね
万能さはわかるけどさ
それで効率が〜とか
どうなのそれw
429はちみつ餃子 ◆8X2XSCHEME
2020/06/16(火) 00:10:13.43ID:1HqJhS8P ワイはもうおっちゃんやから小さい単位で型を作って名前を付けておかんと何をしよったかわからんようになるんやが、
文字列三昧で上手いことやれてまうやつはどういう脳みそをしとんや……。
と疑問に思ったこともあったんやけど、大抵の場合はうまいことやれとらんかった。
文字列三昧で上手いことやれてまうやつはどういう脳みそをしとんや……。
と疑問に思ったこともあったんやけど、大抵の場合はうまいことやれとらんかった。
430デフォルトの名無しさん
2020/06/16(火) 00:48:04.50ID:i3Et6pFy プログラマ2年目だけど全然クラス作れんワイ低みの見物
責務責務いうけどどっからどこまでが責務やねん
責務責務いうけどどっからどこまでが責務やねん
431デフォルトの名無しさん
2020/06/16(火) 01:42:35.85ID:YM27wSPO いや、おそらくその設計間違ってるな。
432デフォルトの名無しさん
2020/06/16(火) 05:42:11.77ID:5RaFaaPW std::string は参照カウントになってる場合もあるでしょ。
オブジェクトをコピーしても長さに応じたデータコピーが発生するとは限らない。
代わりに短い文字列ばっかりでも同じだけ重い可能性もあるんだが。
オブジェクトをコピーしても長さに応じたデータコピーが発生するとは限らない。
代わりに短い文字列ばっかりでも同じだけ重い可能性もあるんだが。
433はちみつ餃子 ◆8X2XSCHEME
2020/06/16(火) 08:52:22.88ID:1HqJhS8P >>432
ちゃんとした実装なら短い文字列ではヒープアロケーションが発生しないような最適化 (いわゆる SSO) が入ってるよ。
ちゃんとした実装なら短い文字列ではヒープアロケーションが発生しないような最適化 (いわゆる SSO) が入ってるよ。
434デフォルトの名無しさん
2020/06/16(火) 08:59:33.85ID:7rFOsosY gccは参照カウントなstringは課題があるからやめたって10年以上前に聞いた気がするけど今はどうなんだろ
435デフォルトの名無しさん
2020/06/16(火) 13:38:01.19ID:Ea3gt1wL >>123
>100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く)
厳密に言えば変わります。
データの個数がM、キーの文字数がNの場合、検索に掛かる時間は、
ハッシュを遣わなくて単純に比較した場合は、
O(MN)
となりますが、ハッシュ法の場合でも、
O(M + N)
となるので、掛け算と足し算の違いは有りますが、キーの文字数をいくら長くしても検索時間が増えない、というようなことはありません。
>100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く)
厳密に言えば変わります。
データの個数がM、キーの文字数がNの場合、検索に掛かる時間は、
ハッシュを遣わなくて単純に比較した場合は、
O(MN)
となりますが、ハッシュ法の場合でも、
O(M + N)
となるので、掛け算と足し算の違いは有りますが、キーの文字数をいくら長くしても検索時間が増えない、というようなことはありません。
436デフォルトの名無しさん
2020/06/16(火) 15:27:53.17ID:VeSUiyGP >>430
クエリとコマンド、リードとライトでとりあえず分けるとこからやったらええ
クエリとコマンド、リードとライトでとりあえず分けるとこからやったらええ
437はちみつ餃子 ◆8X2XSCHEME
2020/06/16(火) 15:55:59.04ID:1HqJhS8P >>430
責務なぁ……。
俺はとにかく名前で考えるようにしてるよ。
名前を付けたい単位に分けて、それを書いている内に名前を付けたい部分が出来たら括り出して……
という風に繰り返してたら (少なくとも自分にとっては) だいたい使いやすいデザインが出来てる。
名前を付けたらそれの役割ってのはほとんど自明だったりするし。
ぼんやりした構造って頭に残り難くて何をやってたかわけわからんようになるので、
名前を付けるってのはかなり大事なことだと思う。
責務なぁ……。
俺はとにかく名前で考えるようにしてるよ。
名前を付けたい単位に分けて、それを書いている内に名前を付けたい部分が出来たら括り出して……
という風に繰り返してたら (少なくとも自分にとっては) だいたい使いやすいデザインが出来てる。
名前を付けたらそれの役割ってのはほとんど自明だったりするし。
ぼんやりした構造って頭に残り難くて何をやってたかわけわからんようになるので、
名前を付けるってのはかなり大事なことだと思う。
438デフォルトの名無しさん
2020/06/16(火) 18:27:56.96ID:HoWpcnpR >>435
O(M+N) って、ハッシュ計算のコストを含めたうえでの最悪計算量でしょ。
ハッシュ計算のコストを除いた平均計算量を O(1) にすることも可能なのがハッシュの利点、というのが一般的かと。
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
> ...検索や追加を要素数によらず定数時間O(1)で実現する。...
O(M+N) って、ハッシュ計算のコストを含めたうえでの最悪計算量でしょ。
ハッシュ計算のコストを除いた平均計算量を O(1) にすることも可能なのがハッシュの利点、というのが一般的かと。
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
> ...検索や追加を要素数によらず定数時間O(1)で実現する。...
439デフォルトの名無しさん
2020/06/16(火) 18:49:47.04ID:Ea3gt1wL >>438
キーはそんなにバイト数が長く無くて、常識的にはある程度で上限が有る事が多いので、通常はO(1)と書いてあるだけです。
なぜかというと、ハッシュ値で大体は特定できても、最後、キーが完全一致していることを確認しなくてはなりませんが、
その時に文字列の比較のために、文字列の文字数であるところのNに比例した時間が掛かるためです。
例えば、キーの文字列の長さNが、1GBだとすると、文字列比較のために1*10^9程度のループが必要となります。
キーはそんなにバイト数が長く無くて、常識的にはある程度で上限が有る事が多いので、通常はO(1)と書いてあるだけです。
なぜかというと、ハッシュ値で大体は特定できても、最後、キーが完全一致していることを確認しなくてはなりませんが、
その時に文字列の比較のために、文字列の文字数であるところのNに比例した時間が掛かるためです。
例えば、キーの文字列の長さNが、1GBだとすると、文字列比較のために1*10^9程度のループが必要となります。
440デフォルトの名無しさん
2020/06/16(火) 19:19:02.88ID:HoWpcnpR441デフォルトの名無しさん
2020/06/16(火) 19:21:15.40ID:uOZIHf/t スレ立てるまでもないスレにも同じようなこと書いたのですがすみません
巨大なファイルを読み込んで書き出すプログラムを書いています
time1, data1-1, data2-1, data3-1......datan-1
time2, data1-2, data2-2, data3-2......datan-2
:
みたいな構造が延々と続いています
でこれをdataごとに
data1.csv
time1 data1-1
time2 data1-2
:
ってそれぞれ書き出して分割する感じなんです
vector<ofstream&> files;
for (auto filename : filenames)
{
巨大なファイルを読み込んで書き出すプログラムを書いています
time1, data1-1, data2-1, data3-1......datan-1
time2, data1-2, data2-2, data3-2......datan-2
:
みたいな構造が延々と続いています
でこれをdataごとに
data1.csv
time1 data1-1
time2 data1-2
:
ってそれぞれ書き出して分割する感じなんです
vector<ofstream&> files;
for (auto filename : filenames)
{
442デフォルトの名無しさん
2020/06/16(火) 19:24:51.88ID:uOZIHf/t 失礼途中で送信してしまいました。
vector<ofstream&> files;
for (auto filename : filenames)
{
ofstream temp(filename, ios::out);
files.push_back(&temp);
}
こんな感じでofstreamの配列を作ってあとはそれぞれにデータを入れていこうとしたのですが
アクセス違反になります。スコープの外に出たらofstreamは勝手にcloseされる?そうなのでそのせいかなと思っています
複数のファイルに対して順々にデータを書いていきそれをループするのってどうしたらいいでしょうか
vector<ofstream&> files;
for (auto filename : filenames)
{
ofstream temp(filename, ios::out);
files.push_back(&temp);
}
こんな感じでofstreamの配列を作ってあとはそれぞれにデータを入れていこうとしたのですが
アクセス違反になります。スコープの外に出たらofstreamは勝手にcloseされる?そうなのでそのせいかなと思っています
複数のファイルに対して順々にデータを書いていきそれをループするのってどうしたらいいでしょうか
443デフォルトの名無しさん
2020/06/16(火) 19:29:01.32ID:zbVOEmpz 答え分かってんならちゃんと実体を外に持たせなよ
vector<ofstream> files;
for (auto filename : filenames)
{
ofstream temp(filename, ios::out);
files.push_back(std::move(temp));
}
vector<ofstream> files;
for (auto filename : filenames)
{
ofstream temp(filename, ios::out);
files.push_back(std::move(temp));
}
444デフォルトの名無しさん
2020/06/16(火) 20:59:11.88ID:i3Et6pFy 通常はO(1)(で見積もっときゃまぁ大きくは外れない)
445デフォルトの名無しさん
2020/06/16(火) 22:57:05.95ID:EUOlqdFN 業務でC++やることになりました
どうせなら体系的に学ぼうと思い、本を買おうと思いますがおすすめありますか?
CとC#の経験はあります
Cは組み込み開発での利用に、C#はデザインパターンを少しは活用出来る程度のレベルです
どうせなら体系的に学ぼうと思い、本を買おうと思いますがおすすめありますか?
CとC#の経験はあります
Cは組み込み開発での利用に、C#はデザインパターンを少しは活用出来る程度のレベルです
446デフォルトの名無しさん
2020/06/16(火) 23:21:49.71ID:yU3B6kSM >>435
キーの文字数Nはプログラムがビルドしおわったら変わらないのだから実質定数なのであって、
結局O(M)になるのでは…
(任意のxについて x + 定数 < a * xを満たす定数aを見出せるからオーダー表記の約束によりO(M+(定数)) = O(M)ェ、
しかもこの場合のMはデータの個数に比例するとわいえ、一般的はハッシュテーブルなら衝突しない限り
1回のテーブルアクセスで目的のエントリにたどり着くから、実際にはデータの個数÷ハッシュテーブルサイズ(エントリ数)
となるから衝突が無視できる(エントリ選択に統計的に偏りがなく、かつハッシュテーブルサイズが十分おおおきい
ならO(1)と逝って良いキモス、
キーの文字数Nはプログラムがビルドしおわったら変わらないのだから実質定数なのであって、
結局O(M)になるのでは…
(任意のxについて x + 定数 < a * xを満たす定数aを見出せるからオーダー表記の約束によりO(M+(定数)) = O(M)ェ、
しかもこの場合のMはデータの個数に比例するとわいえ、一般的はハッシュテーブルなら衝突しない限り
1回のテーブルアクセスで目的のエントリにたどり着くから、実際にはデータの個数÷ハッシュテーブルサイズ(エントリ数)
となるから衝突が無視できる(エントリ選択に統計的に偏りがなく、かつハッシュテーブルサイズが十分おおおきい
ならO(1)と逝って良いキモス、
447デフォルトの名無しさん
2020/06/16(火) 23:31:56.61ID:yU3B6kSM あと1億文字のstring aと10文字のstring bとでハッシュキーを求める手間はどうかというと、
正直にやると文字数に比例するが
うまいことやったら定数にできる
もしくは文字列の構成時に都度ハッシュを更新するようにして、
ハッシュが入用になったときカタが付いている形ににする
正直にやると文字数に比例するが
うまいことやったら定数にできる
もしくは文字列の構成時に都度ハッシュを更新するようにして、
ハッシュが入用になったときカタが付いている形ににする
448デフォルトの名無しさん
2020/06/16(火) 23:44:57.63ID:Z1WD1bfY そんな事をするなら素直にノードのポインタを持て
と言いたい
と言いたい
449デフォルトの名無しさん
2020/06/16(火) 23:56:47.86ID:yU3B6kSM それではもともとの問題が解決しない
一億文字のstring aがメモリ上に存在するとして、
まったく別の手段で同じ字面の一億文字の文字列bを作ってしまったとする
aはaのノードを指し、
bはbのノードを指す、としたときに、
2つのノードが実は同じ文字列であることを確かめるには、
プログラムが他にあまた生成した10億個の文字列を一つ一つ確かめ、
最長1億文字の比較を行わねば結論が出ない(
ハッシュテーブルなら一瞬で済む
一億文字のstring aがメモリ上に存在するとして、
まったく別の手段で同じ字面の一億文字の文字列bを作ってしまったとする
aはaのノードを指し、
bはbのノードを指す、としたときに、
2つのノードが実は同じ文字列であることを確かめるには、
プログラムが他にあまた生成した10億個の文字列を一つ一つ確かめ、
最長1億文字の比較を行わねば結論が出ない(
ハッシュテーブルなら一瞬で済む
450デフォルトの名無しさん
2020/06/16(火) 23:57:59.42ID:yU3B6kSM 訂正orz、
誤: 10億個の文字列
正: 10億個のノードの文字列
誤: 10億個の文字列
正: 10億個のノードの文字列
451デフォルトの名無しさん
2020/06/17(水) 01:21:46.64ID:6+sJE+by >>440
>N はわかったんだけど、 M もやっぱり最悪ケースの話ってことで合ってる?
>「通常はO(1)」って言ってるし。
ハッシュ値の値の種類が仮に1024個だとすると、
データの個数がMが1024に収まる範囲だと検索時間が増えないのでO(1)と言えます。
しかし、Mが、1024*1024 個になった場合、1つのハッシュ値あたり、1024個の
キーが入ってしまう事になりますので、Mが1024個の時に比べて検索時間は1024倍に
なります。
これも、Mがある範囲内ではO(1)と言えますが、Mが極端に大きいと、やはり、O(M)となりますね。
>N はわかったんだけど、 M もやっぱり最悪ケースの話ってことで合ってる?
>「通常はO(1)」って言ってるし。
ハッシュ値の値の種類が仮に1024個だとすると、
データの個数がMが1024に収まる範囲だと検索時間が増えないのでO(1)と言えます。
しかし、Mが、1024*1024 個になった場合、1つのハッシュ値あたり、1024個の
キーが入ってしまう事になりますので、Mが1024個の時に比べて検索時間は1024倍に
なります。
これも、Mがある範囲内ではO(1)と言えますが、Mが極端に大きいと、やはり、O(M)となりますね。
452デフォルトの名無しさん
2020/06/17(水) 02:05:09.95ID:6+sJE+by 補足しておくと、>>435で
>ハッシュを遣わなくて単純に比較した場合は、
>O(MN)
と書きましたが、ハッシュを使わない場合でもキーがランダムに近い場合、ここまで悪くなくて
検索時間は、O(M) 程度で済みます。
なぜかというとキーの文字数Nが長くなっても、比較は先頭の方の文字をいくつか調べる
だけで異なることが分かってしまうことが多いためです。
少し複雑ですが、この事情は、文字数Nを大きくしても余り変わりませんが、
Nを固定して、データの個数Mを大きくしていった場合、だんだんと文字列を長く調査しないと
判断が付かないケースが増えてきます。
そのため、O(M^2)のような傾向が出てくるはずです。
ただし、これは、ハッシュを使わない場合で、かつ、キーがランダムの場合です。
>ハッシュを遣わなくて単純に比較した場合は、
>O(MN)
と書きましたが、ハッシュを使わない場合でもキーがランダムに近い場合、ここまで悪くなくて
検索時間は、O(M) 程度で済みます。
なぜかというとキーの文字数Nが長くなっても、比較は先頭の方の文字をいくつか調べる
だけで異なることが分かってしまうことが多いためです。
少し複雑ですが、この事情は、文字数Nを大きくしても余り変わりませんが、
Nを固定して、データの個数Mを大きくしていった場合、だんだんと文字列を長く調査しないと
判断が付かないケースが増えてきます。
そのため、O(M^2)のような傾向が出てくるはずです。
ただし、これは、ハッシュを使わない場合で、かつ、キーがランダムの場合です。
453デフォルトの名無しさん
2020/06/17(水) 06:19:39.75ID:y8i+/mqG454デフォルトの名無しさん
2020/06/17(水) 06:22:30.70ID:y8i+/mqG >>442
左辺値参照を何だと思っている?
&tempは左辺値参照に渡せないし
tempを左辺値参照に渡したところで
forのブレースを抜けるたびにtempのdurationが満了していて
破棄済みのオブジェクト痕跡への参照になるだけだ
左辺値参照を何だと思っている?
&tempは左辺値参照に渡せないし
tempを左辺値参照に渡したところで
forのブレースを抜けるたびにtempのdurationが満了していて
破棄済みのオブジェクト痕跡への参照になるだけだ
455デフォルトの名無しさん
2020/06/17(水) 06:25:00.03ID:3yTyzYma 読み違えてたスマンコorz
キーというのは検索する文字列そのものを指していたのかそうか…。n_
一方>>446-447は
キー = ハッシュキー
ハッシュ = ハッシュキー
N = ハッシュキーの長さ
の意味で書いていた、、、。...n_
キーというのは検索する文字列そのものを指していたのかそうか…。n_
一方>>446-447は
キー = ハッシュキー
ハッシュ = ハッシュキー
N = ハッシュキーの長さ
の意味で書いていた、、、。...n_
456デフォルトの名無しさん
2020/06/17(水) 08:27:10.85ID:y8i+/mqG つーかそれ以前の問題で左辺値参照はdefault constructibleでないので
そもそもvectorの要素になれない
そもそもvectorの要素になれない
457デフォルトの名無しさん
2020/06/17(水) 10:02:38.14ID:Q2+1ZVNa458デフォルトの名無しさん
2020/06/17(水) 10:38:40.12ID:GES6ctGC 富豪ですね判ります
459はちみつ餃子 ◆8X2XSCHEME
2020/06/17(水) 11:38:12.26ID:3iRpcXWU >>456
今の C++ (C++11 以降) だと vector の要素に求める要件 (requirements) の中に DefaultConstructible は無いよ。
各メンバ関数 (コンストラクタも含む) の要件として要素が DefaultConstructible であることを要求するものはあるけど。
アロケータの方の要件で参照はダメってことになってるみたいなんで参照が駄目には違いないんだけど、
DefaultConstructible でないというのは直接の理由ではない。
今の C++ (C++11 以降) だと vector の要素に求める要件 (requirements) の中に DefaultConstructible は無いよ。
各メンバ関数 (コンストラクタも含む) の要件として要素が DefaultConstructible であることを要求するものはあるけど。
アロケータの方の要件で参照はダメってことになってるみたいなんで参照が駄目には違いないんだけど、
DefaultConstructible でないというのは直接の理由ではない。
460デフォルトの名無しさん
2020/06/17(水) 11:50:02.38ID:yIGLezdW &&はテンプレートでは左辺にも右辺にもなる
461デフォルトの名無しさん
2020/06/17(水) 13:02:53.13ID:6+sJE+by >>452
すみません、
>そのため、O(M^2)のような傾向が出てくるはずです。
これは忘れてください。
ハッシュを使わない場合の話ですが、Mが大きくなってもこのような傾向は出ず、
O(M)のままだと思われます。
なぜなら、同じハッシュ値に属するそれぞれのキーと、与えられたキーとの完全一致を
検査する際、何文字目で一致し無い事が分かるかについては、データの個数Mが大きく
なっても、その期待値は変化しないと考えられるためです。
つまり、完全一致検査時に、個々のキーとの完全一致検査をループして行う時、
1つずつのキーと与えられたキーとが一致し無い事が分かるまでに検査が必要な
先頭からの文字数の平均値は、データの個数が多くなっても変化しないと考えられます。
そのため、この検査に必要なトータル時間は、α・M のようになり、
αが定数になるため、記号で書けば O(M) となります。
すみません、
>そのため、O(M^2)のような傾向が出てくるはずです。
これは忘れてください。
ハッシュを使わない場合の話ですが、Mが大きくなってもこのような傾向は出ず、
O(M)のままだと思われます。
なぜなら、同じハッシュ値に属するそれぞれのキーと、与えられたキーとの完全一致を
検査する際、何文字目で一致し無い事が分かるかについては、データの個数Mが大きく
なっても、その期待値は変化しないと考えられるためです。
つまり、完全一致検査時に、個々のキーとの完全一致検査をループして行う時、
1つずつのキーと与えられたキーとが一致し無い事が分かるまでに検査が必要な
先頭からの文字数の平均値は、データの個数が多くなっても変化しないと考えられます。
そのため、この検査に必要なトータル時間は、α・M のようになり、
αが定数になるため、記号で書けば O(M) となります。
462デフォルトの名無しさん
2020/06/19(金) 05:28:33.37ID:LA4wBl0H windowsのフラットデザインのほうのuiですが、これがC#というやつですか?すごく起動が遅い
463デフォルトの名無しさん
2020/06/19(金) 09:08:14.85ID:rQKhbTAp464デフォルトの名無しさん
2020/06/19(金) 09:47:56.41ID:LA4wBl0H465デフォルトの名無しさん
2020/06/19(金) 23:16:25.19ID:c7VHi+F3 C++の仕様になぜGUIがない
言語が強制すればOSが統一できるのに
言語が強制すればOSが統一できるのに
466デフォルトの名無しさん
2020/06/19(金) 23:21:04.03ID:0XxGPvOp 幻想だよ
467はちみつ餃子 ◆8X2XSCHEME
2020/06/20(土) 01:10:58.81ID:OUofN66X468デフォルトの名無しさん
2020/06/20(土) 01:14:26.54ID:QdbcnniD GUIなんて流行ですぐ方法論も見た目もかわっちまうからな
20年ぐらい前ならウィンドウに必ずクローズボタンがあるみたいなの
必須だったろうけど、今のGUI設計でそんな前提の設計したら
「脳味噌20年前でとまっとるんか」いわれるのがオチ
スクロールバーとかもどんどん消えてるよな
20年ぐらい前ならウィンドウに必ずクローズボタンがあるみたいなの
必須だったろうけど、今のGUI設計でそんな前提の設計したら
「脳味噌20年前でとまっとるんか」いわれるのがオチ
スクロールバーとかもどんどん消えてるよな
469デフォルトの名無しさん
2020/06/20(土) 01:28:11.81ID:YEdOsyO1 まぁ上っ面をなぞるだけの平凡なGUIでもC++で規定してくれたら嬉しいけどねぇ
OSによらず同じC++のコードだけで簡単なGUIを出せるってなると色々捗る気はする
OSによらず同じC++のコードだけで簡単なGUIを出せるってなると色々捗る気はする
470デフォルトの名無しさん
2020/06/20(土) 02:01:25.69ID:Zc+p+3CN そろそろ音声ユーザーインターフェイスはよ
471デフォルトの名無しさん
2020/06/20(土) 03:39:21.03ID:ASLg4tM8472デフォルトの名無しさん
2020/06/20(土) 03:43:42.23ID:s3zB5lV1473デフォルトの名無しさん
2020/06/20(土) 03:44:49.57ID:s3zB5lV1■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【熊本】園児に強制性交か 保育所勤務の男を逮捕「性的な欲望が我慢できなかった」警察は余罪を調べる [七波羅探題★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★3 [ぐれ★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★]
- 【サッカー】元日本代表DF冨安がオランダ1部アヤックスと大筋合意か 現地メディア報じる [久太郎★]
- 【悲報】欧州、トランプ関税の前例に従い対中規制として関税を検討、中国さん四面楚歌へ [733893279]
- 高市早苗「竹島は日本領土」 [834922174]
- 中国の日本向けレアアースの輸出止まる、高市のせいで日本終了のお知らせ [931948549]
- ヨドバシ店員「転売対策です。エヴァに出てくるロボットの名前をどれかひとつ言ってください」 [268718286]
- あくたんのおまんこって甘そうだよな🤤
- 🏡
