C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part149
https://mevius.5ch.net/test/read.cgi/tech/1581974381/
このスレもよろしくね。
【初心者歓迎】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++相談室 part150
レス数が900を超えています。1000を超えると表示できなくなるよ。
2020/03/24(火) 00:04:33.93ID:YFRNwZnv
845デフォルトの名無しさん
2020/05/10(日) 13:27:57.96ID:EdgxbLB4846デフォルトの名無しさん
2020/05/10(日) 17:58:29.32ID:Pcmn53iK namespace std { inline namespace tr1 {} }
#include <memory>
#include <memory>
847デフォルトの名無しさん
2020/05/10(日) 18:02:33.35ID:LV0wbaaG std名前空間に何かするのは基本的に未定義動作に繋がるのでやめようね
848デフォルトの名無しさん
2020/05/10(日) 18:15:05.57ID:3khm8gAC カラオケで自分が歌いながら録音したカセットテープを爆音でドライブしながら女に聞かすようなものだな
これどう?オレが歌ってんだけど?的な
これどう?オレが歌ってんだけど?的な
849デフォルトの名無しさん
2020/05/10(日) 18:53:54.11ID:0gvZuU03 >>848
それ良くやる
それ良くやる
850デフォルトの名無しさん
2020/05/10(日) 19:05:46.41ID:m91+LxrO 女「さむっ・・・オープンカーかと思ったわ」
851デフォルトの名無しさん
2020/05/10(日) 19:30:31.12ID:657zsB50 >>846
どうもです、しかし自分の環境だとうまくいかないですね。gcc 5.4.0 です。
error: ‘shared_ptr’ is not a member of ‘std::tr1’
std::tr1::shared_ptr<Hoge> hoge;
^
とりあえず>>840を試してみたんですが、やってみるとインクルードファイルが意外と多く、そのほとんどに
#include <tr1/なんちゃら> があり、これらを全て tr1無しにする必要が。
コンパイラーのフラグ等でtr1無しをインクルードするようなことってできましたっけ? うわーさらに脇道。
とりあえず上記を書き直すとした場合、変更量が増えるにつれ、やっぱ全部のファイルで素直にtr1を
全部置換したほうがいいんじゃないかという気が徐々に... っておい > 自分
>>847
御意。ちなみにstdは普通の名前空間とは違うということですか?
しかし namespace の使い方の勉強になりました。いやあ色々思い付かれてすごいです。
どうもです、しかし自分の環境だとうまくいかないですね。gcc 5.4.0 です。
error: ‘shared_ptr’ is not a member of ‘std::tr1’
std::tr1::shared_ptr<Hoge> hoge;
^
とりあえず>>840を試してみたんですが、やってみるとインクルードファイルが意外と多く、そのほとんどに
#include <tr1/なんちゃら> があり、これらを全て tr1無しにする必要が。
コンパイラーのフラグ等でtr1無しをインクルードするようなことってできましたっけ? うわーさらに脇道。
とりあえず上記を書き直すとした場合、変更量が増えるにつれ、やっぱ全部のファイルで素直にtr1を
全部置換したほうがいいんじゃないかという気が徐々に... っておい > 自分
>>847
御意。ちなみにstdは普通の名前空間とは違うということですか?
しかし namespace の使い方の勉強になりました。いやあ色々思い付かれてすごいです。
852デフォルトの名無しさん
2020/05/10(日) 19:41:27.78ID:5OK5MvZd853デフォルトの名無しさん
2020/05/10(日) 21:40:19.38ID:LV0wbaaG854デフォルトの名無しさん
2020/05/11(月) 06:44:06.91ID:WjiQACf7 使われないけど標準なんです。
855デフォルトの名無しさん
2020/05/11(月) 10:06:29.78ID:ihiMo4aq 関数内で宣言した変数を途中でconst化したいときってどうやったらいいですか?
関数というのはこんな感じです
void func() {
int a;
〜aの値を設定する百行くらいの処理〜
〜aを用いたメイン処理。途中で誤ってaを変更しないようにしたい〜
}
aをconstで宣言しておいてaを設定するところはconst_castするというのはやりたくないです。
初期化用関数initializeを作って const int a = initialize(〜); とするしか方法はないですか?
できればそれもしたくないのですが
関数というのはこんな感じです
void func() {
int a;
〜aの値を設定する百行くらいの処理〜
〜aを用いたメイン処理。途中で誤ってaを変更しないようにしたい〜
}
aをconstで宣言しておいてaを設定するところはconst_castするというのはやりたくないです。
初期化用関数initializeを作って const int a = initialize(〜); とするしか方法はないですか?
できればそれもしたくないのですが
856デフォルトの名無しさん
2020/05/11(月) 10:09:55.63ID:MhpqGE2N &a にアクセスする権限を readonly にするとか
環境依存だろうけど
環境依存だろうけど
857デフォルトの名無しさん
2020/05/11(月) 10:13:30.52ID:vLTbwMZ+ >>855
a に設定する値を求める処理を関数化して、その戻り値でconstのaを初期化する。
a に設定する値を求める処理を関数化して、その戻り値でconstのaを初期化する。
858デフォルトの名無しさん
2020/05/11(月) 10:14:29.69ID:vLTbwMZ+ あ、したくないって書いてあったね
859デフォルトの名無しさん
2020/05/11(月) 10:18:49.75ID:m+8/4tPw860デフォルトの名無しさん
2020/05/11(月) 10:53:26.16ID:ihiMo4aq861デフォルトの名無しさん
2020/05/11(月) 11:22:30.96ID:rmb+jfMY どうしてもなら、こうだな
int a_;
//a_で初期化処理をする
int const& a = a_;
//aはconst
int a_;
//a_で初期化処理をする
int const& a = a_;
//aはconst
862デフォルトの名無しさん
2020/05/11(月) 11:26:38.90ID:rmb+jfMY アホらしいけど、こんな手も考えられる
struct sample
{
int a;
void func() {
//初期化処理
std::as_const(*this).func();
}
void func() const {
//aをconst扱い
}
};
struct sample
{
int a;
void func() {
//初期化処理
std::as_const(*this).func();
}
void func() const {
//aをconst扱い
}
};
863デフォルトの名無しさん
2020/05/11(月) 11:30:27.88ID:tShYcoYg 後半をlambda化すれば
aをコピーキャプチャしてmutableにしなければconstになる
aをコピーキャプチャしてmutableにしなければconstになる
864はちみつ餃子 ◆8X2XSCHEME
2020/05/11(月) 11:37:55.81ID:pGzfxkdL GCC や Clang の拡張を使ってよいならこういう書き方は出来る。
void func() {
const int a = ({int a; a=1; a;}); // ブロック内で初期化処理を書いて値を返す
std::cout << a << std::endl; // メイン処理
}
たぶん >>855 が考えている用途だとこれが一番楽なんじゃなかろうかと思うんだけど、
標準ではないってのはやっぱりネックになってくるな。
void func() {
const int a = ({int a; a=1; a;}); // ブロック内で初期化処理を書いて値を返す
std::cout << a << std::endl; // メイン処理
}
たぶん >>855 が考えている用途だとこれが一番楽なんじゃなかろうかと思うんだけど、
標準ではないってのはやっぱりネックになってくるな。
865デフォルトの名無しさん
2020/05/11(月) 11:54:09.12ID:WjiQACf7 constウイルスw
866デフォルトの名無しさん
2020/05/11(月) 12:17:38.26ID:oXH9qZIA ポインタ使えばいいのに
const付きのポインタを宣言だけしといて初期化のスコープ内でアドレス渡せばいい
const付きのポインタを宣言だけしといて初期化のスコープ内でアドレス渡せばいい
867デフォルトの名無しさん
2020/05/11(月) 12:21:06.88ID:vUv7mwxB >>860
RAII教に入信しておとなしく初期化ラムダ関数を使うがよい
RAII教に入信しておとなしく初期化ラムダ関数を使うがよい
868デフォルトの名無しさん
2020/05/11(月) 14:54:10.97ID:NX9zuntd IT掲示板群 ttp://x0000.net/forum.aspx?id=15
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
869デフォルトの名無しさん
2020/05/11(月) 14:54:11.07ID:NX9zuntd IT掲示板群 ttp://x0000.net/forum.aspx?id=15
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
870デフォルトの名無しさん
2020/05/11(月) 14:58:27.84ID:vIusnhzf871デフォルトの名無しさん
2020/05/11(月) 15:01:13.87ID:vIusnhzf 変数名として灰化の用にすればわかりやすいかもしれない。
物理学では、a0 は、a の初期値を意味することが多いので、学術的にも分かり易い。
int a0;
(a0 に対する初期化処理);
const int &a = a0;
(a を読み取るだけの処理);
物理学では、a0 は、a の初期値を意味することが多いので、学術的にも分かり易い。
int a0;
(a0 に対する初期化処理);
const int &a = a0;
(a を読み取るだけの処理);
872デフォルトの名無しさん
2020/05/11(月) 15:02:26.79ID:rdm6Cg4w873デフォルトの名無しさん
2020/05/11(月) 15:28:25.94ID:ZT/W926b a0がスコープから消えないのは片手落ち
どのみちトリッキーなことして読み手を混乱させることしない方がいい
単純にスコープを一画面に収まるぐらいに短くしろ
どのみちトリッキーなことして読み手を混乱させることしない方がいい
単純にスコープを一画面に収まるぐらいに短くしろ
874デフォルトの名無しさん
2020/05/11(月) 15:33:11.51ID:rmb+jfMY キモい個人サイトの宣伝をNG登録っと
875デフォルトの名無しさん
2020/05/11(月) 16:16:12.98ID:rdm6Cg4w876デフォルトの名無しさん
2020/05/11(月) 16:35:15.76ID:gZOsi0FN 処理を途中で止めて、変数とかvectorの中身を確認したりするソフト知らない?
877デフォルトの名無しさん
2020/05/11(月) 16:37:43.30ID:rdm6Cg4w >>873
以下のようにすればその問題も一応は解決する。
int a;
(a に対する初期化処理);
{
const int &a0 = a;
const int &a = a0; // 外の a とは別の a を宣言。
(a を読み取るだけの処理);
}
さらに
#define XXX(_x_) const int &_x_##0 = _x_; const int &_x_ = _x_##0
というマクロを導入すれば、
int a;
(a に対する初期化処理);
{
XXX(a);
(a を読み取るだけの処理);
}
でいける。
以下のようにすればその問題も一応は解決する。
int a;
(a に対する初期化処理);
{
const int &a0 = a;
const int &a = a0; // 外の a とは別の a を宣言。
(a を読み取るだけの処理);
}
さらに
#define XXX(_x_) const int &_x_##0 = _x_; const int &_x_ = _x_##0
というマクロを導入すれば、
int a;
(a に対する初期化処理);
{
XXX(a);
(a を読み取るだけの処理);
}
でいける。
878デフォルトの名無しさん
2020/05/11(月) 16:38:36.67ID:rdm6Cg4w879デフォルトの名無しさん
2020/05/11(月) 16:59:50.23ID:rmb+jfMY >>876
Visual Studioに標準で入ってるよ
Visual Studioに標準で入ってるよ
880デフォルトの名無しさん
2020/05/11(月) 17:54:34.39ID:ihiMo4aq やはり大人しく初期化関数使います
いろいろとアドバイスありがとうございました
いろいろとアドバイスありがとうございました
881デフォルトの名無しさん
2020/05/11(月) 18:09:25.84ID:UkUll7O4 幅優先探索において座標によって侵入コストが均一でない場合に対応するためにプライオリティキューを用いて、
スタート地点からの総移動コスト値(int)を格納する2次元配列と、
それに対応するインデックスとなる座標を格納する構造体(POINT)で実装したいのですが、
ProgrammingPlacePlusというサイトのC++編の「標準ライブラリ」の第12章(priority_queue)のサンプルコードに習って、
使用コンテナがvectorの場合はうまくいくのですが、listにするとコンパイルエラーになってしまいます
int move_cost[256][256];
bool operator >( POINT a, POINT b )
{
return ( move_cost[a.y][a.x] > move_cost[b.y][b.x] );
}
//vector版
std::priority_queue< POINT, std::vector<POINT>, std::greater<POINT> > vector_prio_que;
//list版
std::priority_queue< POINT, std::list<POINT>, std::greater<POINT> > list_prio_que;
初心者ですみません
どうすればlistでも動作させられるのかご教示頂けませんでしょうか
スタート地点からの総移動コスト値(int)を格納する2次元配列と、
それに対応するインデックスとなる座標を格納する構造体(POINT)で実装したいのですが、
ProgrammingPlacePlusというサイトのC++編の「標準ライブラリ」の第12章(priority_queue)のサンプルコードに習って、
使用コンテナがvectorの場合はうまくいくのですが、listにするとコンパイルエラーになってしまいます
int move_cost[256][256];
bool operator >( POINT a, POINT b )
{
return ( move_cost[a.y][a.x] > move_cost[b.y][b.x] );
}
//vector版
std::priority_queue< POINT, std::vector<POINT>, std::greater<POINT> > vector_prio_que;
//list版
std::priority_queue< POINT, std::list<POINT>, std::greater<POINT> > list_prio_que;
初心者ですみません
どうすればlistでも動作させられるのかご教示頂けませんでしょうか
882デフォルトの名無しさん
2020/05/11(月) 18:20:43.09ID:rmb+jfMY883デフォルトの名無しさん
2020/05/11(月) 19:14:29.12ID:UkUll7O4 priority_queueの内部使用コンテナとしては、vector、list、dequeは条件を満たしていると書いてあったので、できるはずだと思ったのですが…
priority_queueは、topメンバ関数で最も優先度の高い要素にしかアクセスできず、
自分で書いたソースでは添え字やイテレータによる直接のアクセスは行っていない
(メンバ関数も、.push .pop .top .emptyしか呼び出していない)のですが、
コンパイルエラーの表示では、ご指摘のとおりリバースイテレータがどうのと出ていました
error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)'
:テンプレート引数を 'const std::reverse_iterator<_RanIt> &'に対して 'std::list<_Ty>::_Iterator<_Secure_validation>' から減少できませんでした
'std::operator -' の宣言を確認してください。
これは内部的にイテレータの操作がされておりそこでエラーになっている感じなのでしょうか?
algorithmやxutilityの該当箇所を見ても難しすぎてわかりませんorz
priority_queueは、topメンバ関数で最も優先度の高い要素にしかアクセスできず、
自分で書いたソースでは添え字やイテレータによる直接のアクセスは行っていない
(メンバ関数も、.push .pop .top .emptyしか呼び出していない)のですが、
コンパイルエラーの表示では、ご指摘のとおりリバースイテレータがどうのと出ていました
error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)'
:テンプレート引数を 'const std::reverse_iterator<_RanIt> &'に対して 'std::list<_Ty>::_Iterator<_Secure_validation>' から減少できませんでした
'std::operator -' の宣言を確認してください。
これは内部的にイテレータの操作がされておりそこでエラーになっている感じなのでしょうか?
algorithmやxutilityの該当箇所を見ても難しすぎてわかりませんorz
>>864
例の奴ですね、ならば、ここはラムダ式の出番でしょう、ラムダ式を定義して即評価します
const int a = [](){int a; a = 1; return a; }();
私以外にもこういうのを希望する人がいるということで、安心しました
例の奴ですね、ならば、ここはラムダ式の出番でしょう、ラムダ式を定義して即評価します
const int a = [](){int a; a = 1; return a; }();
私以外にもこういうのを希望する人がいるということで、安心しました
885デフォルトの名無しさん
2020/05/11(月) 19:28:56.75ID:VXScjWrk > priority_queueの内部使用コンテナとしては、vector、list、dequeは条件を満たしていると書いてあったので
それってどこ情報?
軽くググった限りだと、vector、dequeしか出てこないけど
それってどこ情報?
軽くググった限りだと、vector、dequeしか出てこないけど
886デフォルトの名無しさん
2020/05/11(月) 19:48:22.07ID:UkUll7O4 Programming Place Plus というサイトで配布されていた オフライン版(2019-07-01更新版)の C++編の「標準ライブラリ」の第12章(priority_queue)に書いてありました
887デフォルトの名無しさん
2020/05/11(月) 20:14:46.80ID:1e8qKpQP888デフォルトの名無しさん
2020/05/11(月) 20:21:27.91ID:UkUll7O4 vectorの部分をdequeに替えたら問題なく動作したので、対応してるのvectorとdequeだけの可能性高そう
できゅーならできる、なんちゃって
できゅーならできる、なんちゃって
889デフォルトの名無しさん
2020/05/11(月) 20:42:44.27ID:LZ5jZAGa (デックなんだけど楽しそうだから黙っとこう…)
890デフォルトの名無しさん
2020/05/11(月) 20:48:20.73ID:oppF2e3I >>886
そのサイトが取り違えている
https://cpprefjp.github.io/reference/queue/queue.html
>要件を満たすものとしては deque と list
queue | Programming Place Plus C++編【標準ライブラリ】 第11章
https://programming-place.net/ppp/contents/cpp/library/011.html
>Container には、vector(第5章) や list(第6章)
***
https://cpprefjp.github.io/reference/queue/priority_queue.html
>要件を満たすものとしてはvectorとdeque
priority_queue | Programming Place Plus C++編【標準ライブラリ】 第12章
https://programming-place.net/ppp/contents/cpp/library/012.html
>Container には、deque(第7章) や list(第6章)
そのサイトが取り違えている
https://cpprefjp.github.io/reference/queue/queue.html
>要件を満たすものとしては deque と list
queue | Programming Place Plus C++編【標準ライブラリ】 第11章
https://programming-place.net/ppp/contents/cpp/library/011.html
>Container には、vector(第5章) や list(第6章)
***
https://cpprefjp.github.io/reference/queue/priority_queue.html
>要件を満たすものとしてはvectorとdeque
priority_queue | Programming Place Plus C++編【標準ライブラリ】 第12章
https://programming-place.net/ppp/contents/cpp/library/012.html
>Container には、deque(第7章) や list(第6章)
891デフォルトの名無しさん
2020/05/11(月) 21:01:34.17ID:UkUll7O4 そこのサイト詳しくわかりやすく解説してくれているから頼りにしていたのですけど、間違いがあるとは残念ですね…
vectorは要素をずらしたりコピーしたりで実行速度が遅そうだと思ってlistを使いたかったのですが、
素人考えでしたかね
vectorは要素をずらしたりコピーしたりで実行速度が遅そうだと思ってlistを使いたかったのですが、
素人考えでしたかね
892デフォルトの名無しさん
2020/05/11(月) 21:10:39.83ID:1x7ET1G/ dequeでよくね
893デフォルトの名無しさん
2020/05/11(月) 21:30:43.10ID:rmb+jfMY894デフォルトの名無しさん
2020/05/11(月) 21:33:07.54ID:M5DpbX0A >>883
std::priority_queue
https://cpprefjp.github.io/reference/queue/priority_queue.html
ここには、vector・dequeがあると書いてある。
list は書いていない
std::priority_queue
https://cpprefjp.github.io/reference/queue/priority_queue.html
ここには、vector・dequeがあると書いてある。
list は書いていない
895デフォルトの名無しさん
2020/05/11(月) 21:37:14.43ID:VXScjWrk priority_queueって内部実装がヒープみたいだから、
末尾にしか追加削除しないと思われるので、vectorで十分では
末尾にしか追加削除しないと思われるので、vectorで十分では
896デフォルトの名無しさん
2020/05/11(月) 21:45:02.52ID:1e8qKpQP コンセプトがくればこういう悲しい出来事も減るのかな
897デフォルトの名無しさん
2020/05/11(月) 21:47:53.20ID:zAHWYKkR C++って何作れば勉強になるんだろ
898デフォルトの名無しさん
2020/05/11(月) 21:54:43.39ID:UkUll7O4 縦10マス×横40マスの地図で幅優先探索を100回まわして時間計ったら、
vectorだと989ms
dequeだと904ms
で大差ないかんじでした
デフォルトのままvectorを利用していきたいと思います
アドバイス下さいました熟練者の皆さまありがとうございましたm(_ _)m
vectorだと989ms
dequeだと904ms
で大差ないかんじでした
デフォルトのままvectorを利用していきたいと思います
アドバイス下さいました熟練者の皆さまありがとうございましたm(_ _)m
899デフォルトの名無しさん
2020/05/11(月) 22:38:15.90ID:M5DpbX0A 漏れは、2分ヒープを自分で作って、ソートしたりしたけど、
配列の[0]は使わず、[1]から始めると計算が楽なので、
親1, 左右の子は2, 3で、法則は親n, 子2n, 2n+1
コンテナの最後にオブジェクトを追加し、
それが親の数値より小さい場合は、
再帰的に親と交換していく (親子を交換)
再帰的に、親は両方の子以下の数値をもつ。
左右の子(兄弟)の大小関係は考慮しない
配列の先頭要素[1]をPopし、配列の最後の要素を、
[1]に持ってきて、そこから再帰的に、左右の子と比べながら、
子の数値より大きい場合は、入れ替える
ピッコロ大魔王は、これよりもさらに効率的な方法を言ってたけど
このアルゴリズムでは、deque のリンクは不要だろ?
親n, 子2n, 2n+1 で、メモリの場所が分かるのでは?
配列の[0]は使わず、[1]から始めると計算が楽なので、
親1, 左右の子は2, 3で、法則は親n, 子2n, 2n+1
コンテナの最後にオブジェクトを追加し、
それが親の数値より小さい場合は、
再帰的に親と交換していく (親子を交換)
再帰的に、親は両方の子以下の数値をもつ。
左右の子(兄弟)の大小関係は考慮しない
配列の先頭要素[1]をPopし、配列の最後の要素を、
[1]に持ってきて、そこから再帰的に、左右の子と比べながら、
子の数値より大きい場合は、入れ替える
ピッコロ大魔王は、これよりもさらに効率的な方法を言ってたけど
このアルゴリズムでは、deque のリンクは不要だろ?
親n, 子2n, 2n+1 で、メモリの場所が分かるのでは?
900はちみつ餃子 ◆8X2XSCHEME
2020/05/12(火) 00:41:18.87ID:NsC/lgb+901デフォルトの名無しさん
2020/05/12(火) 01:32:23.54ID:nCmEHjd6 >>899
なるほど、n, 2n, 2n+1 番の要素に格納してゆくかんじですか、素晴らしいアイデアですね
自力での実装がどうしても必要になったら、配列で作るときのヒントにさせていただきますね
>vectorだと989ms
探索1回あたり10msもかかるのはちょっとおかしいだろうと思って見直したら、
ソリューション構成をDebugにして、「デバッグ開始」してるせいでした
ソリューション構成をReleaseにして、「デバッグなしで開始」にしたら、
探索1回あたり0.02ms弱に収まりました(vector使用時)
STLコンテナ使っててデバッグモードだと500倍も遅くなりうるのか…
ちなみにdeque使用時は0.05msでやや遅めだったのでやはりvectorを使う方がよさそう
なるほど、n, 2n, 2n+1 番の要素に格納してゆくかんじですか、素晴らしいアイデアですね
自力での実装がどうしても必要になったら、配列で作るときのヒントにさせていただきますね
>vectorだと989ms
探索1回あたり10msもかかるのはちょっとおかしいだろうと思って見直したら、
ソリューション構成をDebugにして、「デバッグ開始」してるせいでした
ソリューション構成をReleaseにして、「デバッグなしで開始」にしたら、
探索1回あたり0.02ms弱に収まりました(vector使用時)
STLコンテナ使っててデバッグモードだと500倍も遅くなりうるのか…
ちなみにdeque使用時は0.05msでやや遅めだったのでやはりvectorを使う方がよさそう
902899
2020/05/12(火) 02:06:26.24ID:q3FkXSvr 普通の実装では、[0]から始めると、
親0, 左右の子は1, 2で、親1, 左右の子は3, 4で、
親n, 子2n+1, 2n+2、となり複雑
子3なら親は、(3-1)/2 = 1
子4なら親は、(4-1)/2 = 1.5 で、切り捨てて1
>>899
では、配列の[0]は使わない。[1]から始めると計算が楽
親1, 左右の子は2, 3で、親n, 子2n, 2n+1
子2なら親は、2/2 = 1
子3なら親は、3/2 = 1.5 で、切り捨てて1
親0, 左右の子は1, 2で、親1, 左右の子は3, 4で、
親n, 子2n+1, 2n+2、となり複雑
子3なら親は、(3-1)/2 = 1
子4なら親は、(4-1)/2 = 1.5 で、切り捨てて1
>>899
では、配列の[0]は使わない。[1]から始めると計算が楽
親1, 左右の子は2, 3で、親n, 子2n, 2n+1
子2なら親は、2/2 = 1
子3なら親は、3/2 = 1.5 で、切り捨てて1
903デフォルトの名無しさん
2020/05/12(火) 09:47:29.30ID:9iboxsgQ 呼び出し履歴で過去の状態に戻れるのは、記録してるからだし。
904デフォルトの名無しさん
2020/05/12(火) 11:15:54.23ID:4WwqN1hQ dequeue一択
905デフォルトの名無しさん
2020/05/12(火) 11:26:05.76ID:xLvzOPR4 そういえばdeque使ってよかったって経験ないなぁ
906デフォルトの名無しさん
2020/05/12(火) 11:33:14.56ID:8l4UOEBM heap構造ならvectorが速いよね
事前に適切なサイズでreserveしておけば再配置も起きないし
事前に適切なサイズでreserveしておけば再配置も起きないし
907デフォルトの名無しさん
2020/05/12(火) 11:52:31.54ID:Jgs88fl2 前後にニョキニョキ伸ばすような用途だとdequeが一番よ
908デフォルトの名無しさん
2020/05/12(火) 12:41:24.29ID:ph0RCKO5 複数のソース・ヘッダーファイルのセットから一つの動的dllは作れないのでしょうか?
910デフォルトの名無しさん
2020/05/12(火) 13:34:11.63ID:ph0RCKO5911はちみつ餃子 ◆8X2XSCHEME
2020/05/12(火) 13:43:29.89ID:NsC/lgb+912デフォルトの名無しさん
2020/05/12(火) 14:09:57.20ID:j/0vQ47K 何が困っているのかさっぱりだぜ
リンカでdllにするんだろ
複数のオブジェクトファイルをリンクすることになんの疑問が
リンカでdllにするんだろ
複数のオブジェクトファイルをリンクすることになんの疑問が
913デフォルトの名無しさん
2020/05/12(火) 14:15:34.04ID:9Z5koysX BASICとかやってた部類の人間だとリンクの概念とかわからんかもね
914デフォルトの名無しさん
2020/05/12(火) 14:17:43.22ID:9Z5koysX そういう化石の人がつい最近いじりはじめた可能性もある
915はちみつ餃子 ◆8X2XSCHEME
2020/05/12(火) 14:18:45.89ID:NsC/lgb+ コマンドラインから使うときでもだいたいコンパイラドライバが
いい感じにやってくれるから細かなことまで意識する機会も
あまり無いしな。
いい感じにやってくれるから細かなことまで意識する機会も
あまり無いしな。
916デフォルトの名無しさん
2020/05/12(火) 14:24:47.83ID:9Z5koysX 昔は依存関係調べるメイクファイルビルダーみたいなの使ってたけど
今はそこら辺もコンパイラが全自動で全部やってくれる
今はそこら辺もコンパイラが全自動で全部やってくれる
917デフォルトの名無しさん
2020/05/12(火) 14:24:51.94ID:s06VnCgE なんかデジャブ…
つい数日前にもまとめてlib化はできるけどdll化できないって質問があったような…
つい数日前にもまとめてlib化はできるけどdll化できないって質問があったような…
918デフォルトの名無しさん
2020/05/12(火) 14:24:57.48ID:SVn+5d28 >>912
おそらく本人は何も分かっていない、何が分かっていないか分からない、書いてあったことを真似るしか出来ない、ということなんだと思う。
おそらく本人は何も分かっていない、何が分かっていないか分からない、書いてあったことを真似るしか出来ない、ということなんだと思う。
919デフォルトの名無しさん
2020/05/12(火) 14:30:14.06ID:9Z5koysX 写経から悟りを得るかどうかの瀬戸際という辺りか
920デフォルトの名無しさん
2020/05/12(火) 14:32:49.45ID:0QBBSU9v 40年前の子供向けBASIC雑誌ですら動的生成を当たり前のようにしてたのになに言ってんだか
C++は何十年遅れてるのってレベル。ゲイツ舐めすぎ。おまえらはジョブス以下。
C++は何十年遅れてるのってレベル。ゲイツ舐めすぎ。おまえらはジョブス以下。
921デフォルトの名無しさん
2020/05/12(火) 15:24:55.89ID:j/0vQ47K プログラムからコンパイラ呼び出して動的ライブラリ作って呼び出せばいいじゃん
923デフォルトの名無しさん
2020/05/12(火) 19:33:06.04ID:zY2j7Z+k MacだとCMakeが便利だった。
924デフォルトの名無しさん
2020/05/12(火) 19:38:18.80ID:HKiNDHJQ 即時実行されるlambdaなんて
文法上殆んどblock変わらん見た目で、
最適化かければ性能上もblockと変わらんだろ
[&]{
}();
文法上殆んどblock変わらん見た目で、
最適化かければ性能上もblockと変わらんだろ
[&]{
}();
925デフォルトの名無しさん
2020/05/12(火) 19:48:18.72ID:Jgs88fl2 即実行ラムダのインライン展開って本当にやってくれるの?
もちろんプログラマとしては期待するところだけど本当に主要コンパイラがやってるか誰か検証してる?
もちろんプログラマとしては期待するところだけど本当に主要コンパイラがやってるか誰か検証してる?
926デフォルトの名無しさん
2020/05/12(火) 20:13:21.67ID:Qfzty+97 一回しか呼ばれないんならインラインも糞も無い罠
927デフォルトの名無しさん
2020/05/12(火) 20:26:40.11ID:HKiNDHJQ928デフォルトの名無しさん
2020/05/12(火) 20:28:32.15ID:u3gpKmNT 普通の関数コールだって呼び元が1箇所ならインライン展開する
929デフォルトの名無しさん
2020/05/12(火) 20:38:00.80ID:Jgs88fl2 そっかMSVCがやってるなら当然みんなやってるわな
サンクス
サンクス
930デフォルトの名無しさん
2020/05/12(火) 20:38:53.13ID:u3gpKmNT いやそんな事もないけど
>>924
式しかかけない場所というのがあって、そういう場所では文では駄目ですね
式しかかけない場所というのがあって、そういう場所では文では駄目ですね
932デフォルトの名無しさん
2020/05/12(火) 21:12:01.75ID:sL+fzMl7 set::insert()で警告が出るんですが、なんででしょう?vc2015です。
std::set<int> items;
items.insert(1); // ここで警告 C4800
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(175): warning C4800: 'int': ブール値を 'true' または 'false' に強制的に設定します
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtree(1823): note: コンパイル対象の関数 テンプレート インスタンス化 'std::pair<std::_Tree_const_iterator<・・・
std::set<int> items;
items.insert(1); // ここで警告 C4800
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(175): warning C4800: 'int': ブール値を 'true' または 'false' に強制的に設定します
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtree(1823): note: コンパイル対象の関数 テンプレート インスタンス化 'std::pair<std::_Tree_const_iterator<・・・
933デフォルトの名無しさん
2020/05/12(火) 21:13:55.56ID:u3gpKmNT 書いてある通りじゃね?
934デフォルトの名無しさん
2020/05/12(火) 22:10:57.80ID:sL+fzMl7935デフォルトの名無しさん
2020/05/12(火) 22:13:18.80ID:8l4UOEBM コンパイラを代える
936デフォルトの名無しさん
2020/05/13(水) 03:55:06.92ID:FY0MfQzC std::set<int> items;
items.insert((int)1); //明示的キャスト
items.insert((int)1); //明示的キャスト
937デフォルトの名無しさん
2020/05/13(水) 03:57:56.39ID:4cp2IEvR なんでintのコンテナにint突っ込もうとしたら型警告出るんだろうな?
やっぱMSVCってクソだわ
やっぱMSVCってクソだわ
938デフォルトの名無しさん
2020/05/13(水) 06:13:43.32ID:k7uwq6xu std::set::inster() の引数でbool型が優先されるのか。
どういうオーバーロードが作用してるんだろう。
どういうオーバーロードが作用してるんだろう。
939デフォルトの名無しさん
2020/05/13(水) 06:24:21.32ID:nnLD0aa0 >>929
頭悪すぎw
頭悪すぎw
940デフォルトの名無しさん
2020/05/13(水) 06:25:48.91ID:nnLD0aa0 >>937
おまえがウジ虫だからだよw
おまえがウジ虫だからだよw
941938
2020/05/13(水) 08:02:38.51ID:k7uwq6xu 誤; std::set::inster()
正: std::set::insert()
1文字での入れ替わりは珍しくないけど、2字ずれちゃったのは何故だ?
正: std::set::insert()
1文字での入れ替わりは珍しくないけど、2字ずれちゃったのは何故だ?
942デフォルトの名無しさん
2020/05/13(水) 08:08:13.33ID:OofdoMNm 両手でタイプしているとタイミングのずれでそうなることがある
943デフォルトの名無しさん
2020/05/13(水) 08:09:03.26ID:OofdoMNm しかしs, e, r, tすべて左手だな
944デフォルトの名無しさん
2020/05/13(水) 09:04:32.56ID:JcjM8CgX ドッペルゲンガーだろね。
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★5 [七波羅探題★]
- 【速報】 米トランプ政権声明 「中国が台湾を奪おうとする、いかなる試みも阻止する」 中国「レッドラインだ」 ★2 [お断り★]
- 元プロ野球選手・堂上隼人(43)を20代女性2人へのわいせつ未遂容疑で8回目の逮捕…これまでの被害者は10代・20代の女性11人に [Anonymous★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 【高校野球】なぜ『7回制』は反対多数でも止まらないか… 高野連が「全員の命」守るために貫く伝統より改革の姿勢 [冬月記者★]
- JAが"政府の備蓄米買い上げ"見越して価格下げず!?「古いコメは食用向きでないなどと理由をつけ...」専門家解説 ★2 [煮卵★]
- 【悲報】インターネット(光回線)来年度以降値上げか [358382861]
- 【高市悲報】自衛隊「実は事前に現場海域で中国軍から空母での発着訓練をすると通告がありました」え…?😨😨 [931948549]
- "メイドさん"が使う武器→ケンモメンの78%が一致に [856387292]
- 【高市速報】中国「このままだと日本が先制攻撃してくる」 [583597859]
- 【悲報】地銀や生保 長期金利急上昇で含み損が加速 [358382861]
- 日本企業「株主は口を出さず金だけ出せ!😡」←これ
