random_shuffle

[機能]

  イテレータで指定された範囲の要素をランダムに並び替えます.下の表現方法では,乱数発生関数を,
  int random_gen(int num)
の形式で指定できます.

[形式]
	#include <algorithm>
	#include <functional>

	template <class RandomAccessIterator> void random_shuffle(RandomAccessIterator first, RandomAccessIterator last);
	template <class RandomAccessIterator, class RandomNumberGenerator> void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, RandomNumberGenerator& rand_gen);
		

[使用例]

  1. random_shuffle の使用方法です.
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int rand_gen(int num)
    {
    	double x = (double)rand() / RAND_MAX;
    	return (int)(num * x);
    }
    
    int main()
    {
    	vector<int> v1, v2;
    	vector<int>::iterator it;
    					// 初期設定
    	printf("**初期状態 v1**\n");
    	for (int i1 = 0; i1 < 10; i1++)
    		v1.push_back(i1+1);
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	printf("**初期状態 v2**\n");
    	for (int i1 = 0; i1 < 10; i1++)
    		v2.push_back(10*(i1+1));
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 をランダムに並び替える
    	printf("v1 をランダムに並び替える\n");
    	random_shuffle(v1.begin(), v1.end());
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v2 をランダムに並び替える(乱数発生関数指定)
    	printf("v2 をランダムに並び替える(乱数発生関数指定)\n");
    	random_shuffle(v2.begin(), v2.end(), rand_gen);
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	return 0;
    }
    
    (出力)
    
    **初期状態 v1**
      1  2  3  4  5  6  7  8  9  10
    **初期状態 v2**
      10  20  30  40  50  60  70  80  90  100
    v1 をランダムに並び替える
      9  2  10  3  1  6  8  4  5  7
    v2 をランダムに並び替える(乱数発生関数指定)
      90  20  70  100  40  50  10  30  80  60
    			

ホームページ 目次 演習解答例目次 付録目次 索引