質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

300閲覧

C++のシャッフルについて

mol

総合スコア32

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/08/19 05:30

下記のような、クラスで作成したvoidをランダムにシャッフルすることはできないのでしょうか?どなたかご教授いただけると嬉しいです。

該当のソースコード

C++

1#include <algorithm> 2#include <iostream> 3#include <vector> 4#include <numeric> 5#include <iterator> 6#include <random> 7#include <string> 8#include <windows.h> 9 10class test 11{ 12public: 13 void test::test_t() 14 { 15 std::string str = "おはよう"; 16 17 std::cout << str << std::endl; 18 Sleep(3000); 19 } 20 void test::test_e() 21 { 22 std::string str2 = "こんにちは"; 23 24 std::cout << str2 << std::endl; 25 Sleep(3000); 26 } 27 void test::test_s() 28 { 29 std::string str3 = "こんばんは"; 30 31 std::cout << str3 << std::endl; 32 Sleep(3000); 33 } 34}; 35 36test tes; 37int main() 38{ 39 std::vector<void> v{ tes.test_t,tes.test_e,tes.test_s }; 40 41 std::mt19937 e{ std::random_device{}() }; 42 std::shuffle(v.begin(), v.end(), e); 43 std::copy(v.begin(), v.end(), std::ostream_iterator<void> 44 (std::cout)); 45 std::cout << std::endl; 46 47}

補足情報(FW/ツールのバージョンなど)

使用しているのはvisual studio2017です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C++

1#include <algorithm> 2#include <iostream> 3#include <vector> 4#include <chrono> 5#include <random> 6#include <string> 7#include <Windows.h> 8 9class test { 10public: 11 void test::test_t() { 12 std::string str = "おはよう"; 13 std::cout << str << std::endl; 14 Sleep(3000); 15 } 16 void test::test_e() { 17 std::string str2 = "こんにちは"; 18 std::cout << str2 << std::endl; 19 Sleep(3000); 20 } 21 void test::test_s() { 22 std::string str3 = "こんばんは"; 23 std::cout << str3 << std::endl; 24 Sleep(3000); 25 } 26}; 27 28int main() { 29 std::vector<void(test::*)()> v{ &test::test_t, &test::test_e, &test::test_s }; 30 31 std::mt19937 e{ std::random_device{}() }; 32 std::shuffle(v.begin(), v.end(), e); 33 34 test tes; 35 36 for ( auto fun : v ) { 37 (tes.*fun)(); 38 } 39 40}

vectorの要素はvoidじゃなく、
void(test::*)()「引数なくて戻り値もない、class testのメンバ関数(のポインタ)」

投稿2018/08/19 05:44

編集2018/08/19 05:56
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mol

2018/08/19 08:55

ありがとうございます!
guest

0

下記のような、クラスで作成したvoidをランダムにシャッフルすることはできないのでしょうか?

仮にできたとしても無意味です。void型の値を取り出す方法はない(むろん、何を入れたか区別する方法もない)ので、シャッフルしても何も変化しません。

投稿2018/08/19 05:47

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/08/19 05:52

vector<void> は、void&が存在しないために、宣言すらできませんでした。
mol

2018/08/19 09:01

そうなんですね。vector<>ならどんな型を入れても大丈夫だと思ってました。ありがとうございます!
episteme

2018/08/19 13:05

"無"を入れる容器は作れないのよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問