STL random_shuffle 洗牌函数了解一下

洗牌函数的含义就是将数据打乱顺序,测试代码如下:

#include 
#include 
#include 
#include 
#include  // std::default_random_engine
#include 
using namespace std;

#define N 5

// 自定义的generator, 用来random_shuffle.
class CSelfGenerator
{
public:
	ptrdiff_t operator() (ptrdiff_t max)
	{
		unsigned int seed = ((int)time(NULL));
		srand(seed);
		double _rand = static_cast(rand());
		double temp = _rand / static_cast(RAND_MAX);
		return static_cast(temp * max);
	}
};

int main(int argc, char** argv)
{
	// test int
	int a[9] = { 100, 200, 300, 400, 500, 600, 700, 800, 900};
	/*CSelfGenerator sg;*/
	std::random_shuffle(a, a + 9/*, sg*/);
	for (int i = 0; i < 9; i++){
		cout << a[i] << " ";
	}
	cout << endl;

	// test float
	float _float[N] = { 0.0123, 0.0234, 0.0345, 0.0456, 0.0567 };
	std::random_shuffle(_float, _float + N);
	for (int i = 0; i < N; i++){
		cout << std::fixed << _float[i] << " ";//fixed就是用一般的方式输出浮点数,而不是科学计数法
	}
	cout << endl;

	// test double
	double _double[N] = { 1.2E-2, 2.3E-2, 3.4E-2, 4.5E-2, 5.6E-2 };
	std::random_shuffle(_double, _double + N);
	for (int i = 0; i < N; i++){
		cout << std::fixed << _double[i] << " ";
	}
	cout << endl;

	// test string
	vector strArray;
	strArray.push_back("aa");
	strArray.push_back("bb");
	strArray.push_back("cc");
	strArray.push_back("dd");
	strArray.push_back("ee");
	strArray.push_back("ff");
	std::random_shuffle(strArray.begin(), strArray.end());
	for(int j = 0; j < strArray.size(); j++){
		cout << strArray[j].c_str() << " ";
	}
	cout< intArray;
	for(int i=0; i<=99; i++){
		intArray.push_back(i); 
	}
	random_shuffle(intArray.begin(), intArray.end()); // 0~99的随机生成
	for(int i=0; i<=99; i++){
		cout << intArray[i] << " ";
	}
	cout<

这里面有个问题:除了最后随机生成99个随机数的顺序被打乱了,其余的每次运行后,顺序都是一样的!何解?

有了解的朋友,如果懂的,麻烦留个言~~

你可能感兴趣的:(STL,/,boost)