C++相談室 part139

次スレを立てる時は本文の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

553デフォルトの名無しさん (アウアウウー Sa47-+RRK)2018/12/05(水) 19:19:02.10ID:A1G7ulzba
表示も必要?

554デフォルトの名無しさん (ワッチョイ dbe7-hzet)2018/12/05(水) 19:34:26.69ID:ASlfAML90
説明が下手ですいません
236
000
011
こんな感じで9か所すべてに0から9まで入ったものを全パターン格納したいです 

555デフォルトの名無しさん (ワッチョイ 237f-C0zt)2018/12/05(水) 19:44:08.41ID:3dIXAL6A0
変数に全パターン格納するのは死ぬほどメモリ食うな

294
753
618

557デフォルトの名無しさん (ワッチョイ dbe7-hzet)2018/12/05(水) 19:55:45.26ID:ASlfAML90
.csvにして出力したいので
excelで手打ちするよりはいいのかなと

558デフォルトの名無しさん (ブーイモ MM67-ZETi)2018/12/05(水) 20:42:06.10ID:GtowYFeTM
たぶん、20GBほど必要だけどいいんか?
全パターンにこだわらず、乱数で必要な数だけ生成したほうが良いのでは?

559デフォルトの名無しさん (ブーイモ MM67-ZETi)2018/12/05(水) 20:46:39.65ID:GtowYFeTM
おっとinodeの最小サイズがあるから100倍くらいかしら

560デフォルトの名無しさん (ワッチョイ 0bb3-Gcmv)2018/12/05(水) 21:02:47.61ID:OZlj6GiF0
それは3*3を1次元で考えると
0 0 0 0 0 0 0 0 0
から1ずつ増やして
9 9 9 9 9 9 9 9 9
まで表示して全パターンを変数に格納ってこと?
単純に1桁1バイトで考えると1パターンにつき9桁9バイト必要なので、格納領域だけで9000000000バイト=約8.4ギビバイト必要なんだけどそういうこと?
1000パターン/秒の速度で表示したとしても104日かかる計算になる。
課題か何か知らないけど、問題を勘違いしてるのでは?

561デフォルトの名無しさん (ワッチョイ 1a61-2OVW)2018/12/05(水) 21:04:45.27ID:zPVAi42/0
>>551
0からN×N桁の 10進数

562デフォルトの名無しさん (ワッチョイ 0bb3-hzet)2018/12/05(水) 21:04:58.31ID:RkaIFTNe0
3*3だったら要素数9の配列を用意してループで回せばいいだけじゃないの?

563デフォルトの名無しさん (ワッチョイ 1a12-y69T)2018/12/05(水) 21:12:05.38ID:8vnwU0Eo0
9!≒36万行のcsvが欲しいのか?

4x4だと16通りで16!=20?922?789?888?000
おおよそ21京行のcsvファイルが出来上がる

5x5だとwikipediaにもoeisにも載ってないが
15,5112,1004,3330,9859,8400,0000 らしいので
15.5穣行のcsvファイルが出来上がる
Yが一歩手前の??なんで、世界中の記憶媒体を寄せ集めても足りるかどうか・・・

6x6だと36!の
37,1993,3267,8990,1217,4679,9944,8150,8352,0000,0000
37正
csvファイルを作り終える前に人類滅亡するレヴェル

564デフォルトの名無しさん (ワッチョイ dbe7-hzet)2018/12/05(水) 21:19:06.30ID:ASlfAML90
実際に必要なのは160万通りぐらいだけど無理?
無理なら諦めます

全ての場合分けを検討できないから、枝刈りしようよ。

566デフォルトの名無しさん (ワッチョイ dbe7-hzet)2018/12/05(水) 21:25:59.07ID:ASlfAML90
すいません諦めます
ありがとうございました

567デフォルトの名無しさん (ワッチョイ 0bb3-hzet)2018/12/05(水) 22:03:07.79ID:RkaIFTNe0
諦めたらそこで終了だよ!!!

糸冬 了

569デフォルトの名無しさん (ワッチョイ 5a23-+RRK)2018/12/05(水) 22:08:02.64ID:u9wJX+Xt0
全パターン網羅じゃなくてピックアップでいいなら乱数という手段もありでは

570デフォルトの名無しさん (ワッチョイ 0bb3-hzet)2018/12/05(水) 22:14:00.75ID:RkaIFTNe0
蟻ちゃん、なに終わらせてんのさ。

乗り遅れた…
鏡像とか回転の扱いをどうするかとか
楽しそうな課題だな

572はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-n9Ol)2018/12/06(木) 04:47:25.11ID:bHPTeUA/0
N×N のテーブルを N 種類の値同士の演算結果と考えて
その演算結果が群の性質を満たすパターンだけを取り出す
というような課題はやったことがあるな。

群論的には値の個性は意味がなくて、
たとえば全ての 1 と全ての 2 を交換したようなパターンは
等しいという扱いになってしまうので、
それを除去するのが面倒だった。

いや、この話題の流れには関係ない話なんだけど >>571 を見て思い出したもんだから。

573デフォルトの名無しさん (ワッチョイ 6107-1cCS)2018/12/06(木) 07:30:52.06ID:OnZIks560
日記帳

ZDDかお姉さん問題でggr

575デフォルトの名無しさん (JP 0Hdd-FsKt)2018/12/06(木) 23:01:59.32ID:CWnIHGMVH
vector A に vector B を部分代入することってできないの?
つまり、代入後は vector B が vector A の部分vectorになっててほしい

insert

577デフォルトの名無しさん (ワッチョイ 13a2-n9Ol)2018/12/07(金) 02:03:39.38ID:vYfFg2B+0
std::copyでどう?

578デフォルトの名無しさん (ワッチョイ 497b-Po2/)2018/12/07(金) 02:14:13.85ID:MQVHpO7o0
部分vectorって言ってるから、Bを参照扱いで挿入出来ないかってことじゃないの?
Bを書き換えたらAにも反映されるみたいな。
まぁ、vectorじゃ構造上無理なんだけど。

579デフォルトの名無しさん (ワッチョイ 0123-GoBb)2018/12/07(金) 14:42:20.03ID:lkrG/qbb0
slice

580 ◆QZaw55cn4c (ワッチョイ 5360-460t)2018/12/07(金) 23:37:48.83ID:iNxdNg3x0
>>572
>N×N のテーブルを N 種類の値同士の演算結果と考えてその演算結果が群の性質を満たすパターンだけを取り出す
すごく興味がありますね…
準同型を検出するのが難しそうですが、ガウス吐き出し法で同一解(ただす解を小さいもの順に並べなおす)を弾くようにするだけでなんとかなりますか?
ググッてみると、位数12 の群のひとつは、巡回群でも巡回群の直積でもない、これより低位には現れなかった新たなパターン、らしいのです、これはどんな群なのか具体的に知りたいものです

581デフォルトの名無しさん (ワッチョイ 2be8-5wwv)2018/12/08(土) 08:26:12.03ID:qW/ttJcB0
>>580
とうほぐの人?

582デフォルトの名無しさん (ワッチョイ f9c3-+0bq)2018/12/08(土) 08:34:46.70ID:Cv6IL/oI0
小さい群ならいいだろうけど、散在型単純群が出てくるサイズになっても対応できるかな

583デフォルトの名無しさん (ワッチョイ 899f-QT7o)2018/12/08(土) 13:35:08.63ID:cc77YSwU0
using FUNC = std::function<void(Params&)>;

struct Params {};

template<> std::tuple<> convert_params(const Params&) { return {}; }
template<> std::tuple<int> convert_params(Params& p) { return 0; }

template<typename... Args>
inline static auto message_handler(void(*func)(Args...))
{ return [=](Params& m) { std::apply(func, convert_params<std::tuple<Args...>>(p)); }; }

template<typename... Args>
inline static auto message_handler(std::function<void(Args...)> func)
{ return [=](Params& m) { std::apply(func, convert_params<std::tuple<Args...>>(p)); }; }

template<typename T, typename... Args>
inline static auto message_handler(void(T::*func)(Args...), T* obj)
{
 assert(obj != nullptr);
 return [=](Params& m)
 {
  std::apply(func,
   std::tuple_cat(
    std::tuple<T&>(*obj),
    convert_params<std::tuple<Args...>>(p))
   );
 };
}

584デフォルトの名無しさん (ワッチョイ 899f-QT7o)2018/12/08(土) 13:35:36.54ID:cc77YSwU0
↑の続き

前の投稿で定義した関数を使い、下記の通りに呼び出そうとしているのですが
std::functionを通さずにラムダ直で呼び出した場合に、なんとなく上手にやってくれる
方法がどうしても思いつけません。何か手はないでしょうか?

1 void myfunction(int);
 FUNC func = message_handler(myfunction); // OK グローバル関数

2 void myclass::myfunction(int);
 FUNC func = message_handler(myfunction, this); // OK メンバ関数

3 FUNC func = message_handler([](int){}); // NG ラムダ直

4 std::function<void(int)> myfunction = [](int){};
 FUNC func = message_handler(myfunction); // OK std::function

585デフォルトの名無しさん (ワッチョイ 2beb-xqdQ)2018/12/08(土) 13:43:44.31ID:7QrgfN7v0
頭に+つけると上手くいくと思う
FUNC func = message_handler(+[](int){});

586デフォルトの名無しさん (ワッチョイ 899f-QT7o)2018/12/08(土) 14:25:14.54ID:cc77YSwU0
>>585
あれ、マジでうまくいきました。
調べ方がいまいちわからないのですが、これはどういった機能でしょうか?

587デフォルトの名無しさん (ワッチョイ 899f-QT7o)2018/12/08(土) 14:29:45.48ID:cc77YSwU0
すみません、お礼を言い忘れています。
ありがとうございます。

588デフォルトの名無しさん (ワッチョイ 2beb-xqdQ)2018/12/08(土) 14:59:08.12ID:7QrgfN7v0
>>586
std::decayと同じ働きをするようなもので、ラムダ式を同等の関数ポインタへ変換する(ただしキャプチャをしてはいけない)
なんて調べればいいのかはよくわからない・・・

589デフォルトの名無しさん (ワッチョイ d9e3-1aIk)2018/12/09(日) 14:22:21.02ID:xJ41Kt/M0
突然すまんが、
winnt.h の中に次のような構造体定義があって、外部では、構造体タグ名
_RTL_CRITICAL_SECTION が不完全定義すらもされないで、
_RTL_CRITICAL_SECTION_DEBUG の中でポインタのために使用されている。
仮にこれで、「内部クラス」扱いにならないのだとすれば、
逆に、「内部クラス」を使いたい場合、もし完全定義を与える前に、
不完全なままポインタのために使いたい場合は、どうしたらいいのだろう?

typedef struct _RTL_CRITICAL_SECTION_DEBUG {
WORD Type;
WORD CreatorBackTraceIndex;
struct _RTL_CRITICAL_SECTION *CriticalSection;
LIST_ENTRY ProcessLocksList;
DWORD EntryCount;
DWORD ContentionCount;
DWORD Spare[2];
} RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG;

typedef struct _RTL_CRITICAL_SECTION {
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
LONG LockCount;
LONG RecursionCount;
HANDLE OwningThread;
HANDLE LockSemaphore;
DWORD Reserved;
} RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;

590デフォルトの名無しさん (ワッチョイ d9e3-1aIk)2018/12/09(日) 14:26:38.84ID:xJ41Kt/M0
確か、構造体タグ名は、ブロックに名前空間があって、C と C++ で仕様がごちゃごちゃしていた
気がした。
確か、既に定義がある場合は、それが定義された段階の名前空間を使うが、
完全に新規に定義する場合は、最も内側のブロックの名前空間に登録される、という
感じだった気がしたんだけど。

一度も外部では定義も宣言もしなかった場合、最も内側のブロックの名前空間に登録されるの
だとすれば、クラスや構造体内部の内部クラスに関してもそれの応用になって・・・、と思うんだが、
少なくとも、旧来の C のヘッダファイルでは、その解釈ではまずいことになっている気がする。

591デフォルトの名無しさん (アウウィフ FF05-GoBb)2018/12/09(日) 14:59:08.32ID:rgDJoSoNF
struct _RTL_CRITICAL_SECTION;
って行があるんじゃね

592デフォルトの名無しさん (ワッチョイ 81f2-Po2/)2018/12/09(日) 15:15:39.34ID:LCYDMKL+0
不完全な型はそれを解決する必要があるときに完全な定義が得られればいいんで、
それがどこの名前空間に存在するかについてもそのときに解決できればよかったはず。

593デフォルトの名無しさん (ワッチョイ d9e3-1aIk)2018/12/09(日) 17:56:05.02ID:xJ41Kt/M0
>>591
無い気がする。

さっき思ったんだけど、C++ の場合、winnt.h の大部分は、extern "C" {・・・} で囲まれて
パースされて、旧来の C の仕様のままになるので、内部クラスの概念が無いから
あれでいいのかも知れない???

594デフォルトの名無しさん (ワッチョイ d9e3-1aIk)2018/12/09(日) 18:15:26.56ID:xJ41Kt/M0
>>592
_XXX_DEBUG の方で、_RTL_CRITICAL_SECTION を _XXX_DEBUG の構造体に所属する
「内部クラス」 に解釈してしまった場合、外側の _RTL_CRITICAL_SECTION では、
タグ名としては同じ名前であっても、コンパイラにとっては全くの別の構造体に見なされて
しまうので、たとえば、ポインタを代入する際に、
 「異なるポインタ型への代入がある」
などのエラーが出る可能性がある。

595はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-n9Ol)2018/12/09(日) 18:24:17.47ID:hgaiHSHh0
>>593
extern はリンケージを制御する仕組みで、
extern "C" にしても文法の解釈には影響を与えない。
C として解釈されたりはしないはず。

596デフォルトの名無しさん (ワッチョイ 81f2-Po2/)2018/12/09(日) 18:24:29.50ID:LCYDMKL+0

その「内部クラス」 の定義は存在しないんだから。

何のための不完全型かと
型の中身を意識する必要はない
リンケージなんか関係ない

598デフォルトの名無しさん (ワッチョイ 937c-1aIk)2018/12/10(月) 13:10:56.95ID:Hs8Qkrq90
>>597
不完全定義でも、厳密にどの構造体かは区別されている。

599デフォルトの名無しさん (ワッチョイ 73a5-n9Ol)2018/12/10(月) 21:40:39.61ID:merQK3Z90
不完全型でいけそう
https://ideone.com/SFcGAQ

内部クラスと解釈はされないみたい(内部クラスと解釈されたらリンクリストで困るような)
https://ideone.com/DcYHNu

詳しい仕様は誰かプリーズ

600デフォルトの名無しさん (ワッチョイ 937c-1aIk)2018/12/10(月) 23:34:55.84ID:Hs8Qkrq90
>>599
>(内部クラスと解釈されたらリンクリストで困るような)

しかし、外部クラスと解釈される場合は、本当に内部クラスにしたい場合で、
それ自身が自己参照を持つリンクリストにしたいような場合に、逆に困る
事になるかも知れない。

601デフォルトの名無しさん (ワッチョイ 81f2-Po2/)2018/12/10(月) 23:43:57.33ID:ba1HqxVH0
struct Bの定義は内と外両方同時に存在し得て、検索順で近い方に解釈されるというだけだろ。
何を心配してるのか。

602デフォルトの名無しさん (ワッチョイ 937c-1aIk)2018/12/10(月) 23:48:43.81ID:Hs8Qkrq90
>>601
別の名前空間の構造体だと解釈されれば、ポインタの代入も出来ない。

603デフォルトの名無しさん (ワッチョイ 9333-xqdQ)2018/12/11(火) 01:46:14.52ID:sJmjlCIC0
>>589
このようにしたらいい。
struct _RTL_CRITICAL_SECTION;
struct _RTL_CRITICAL_SECTION *CriticalSection;

https://timsong-cpp.github.io/cppwp/n4659/basic.lookup.elab#2
https://timsong-cpp.github.io/cppwp/n4659/basic.scope.pdecl#7

新着レスの表示
レスを投稿する