#pragma once
#include <vector>
class SelectedRandomCard
{
public:
SelectedRandomCard(int n, int m);
~SelectedRandomCard(void);
std::vector<int> perform();
private:
void randomPermutation();
private:
int _totalN;
int _selectedM;
std::vector<int> _v;
};
#include "StdAfx.h"
#include "SelectedRandomCard.h"
#include <time.h>
#include <random>
#include <iostream>
SelectedRandomCard::SelectedRandomCard( int n, int m )
{
_totalN = n;
_selectedM = m;
for (int i = 0; i<_totalN; i++)
{
_v.push_back(i);
}
srand((unsigned)time(NULL));
}
SelectedRandomCard::~SelectedRandomCard(void)
{
}
void SelectedRandomCard::randomPermutation()
{
int temp = 0;
int randomselected = 0;
for (int i=0; i<_selectedM; i++)
{
//std::cout<<rand()<<std::endl;
randomselected = rand()%(_totalN - i) + i;
temp = _v[i];
_v[i] = _v[randomselected];
_v[randomselected] = temp;
}
}
std::vector<int> SelectedRandomCard::perform()
{
randomPermutation();
return _v;
}
测试
// randomConsole.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "SelectedRandomCard.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
int vectorSize = 10;
const int testN = 100000000;
std::vector<int> sumV;
//initialize the sumV
for (int i=0; i<vectorSize; i++)
{
sumV.push_back(0);
}
for (int i = 0; i<testN; i++)
{
SelectedRandomCard sRandowCard(vectorSize,vectorSize);
std::vector<int> randomSequence = sRandowCard.perform();
for (size_t i=0; i<randomSequence.size(); i++)
{
sumV[i] += randomSequence[i];
//std::cout<<randomSequence[i]<<std::endl;
}
}
for (size_t i=0; i<sumV.size(); i++)
{
std::cout<<sumV[i]<<std::endl;
}
return 0;
}

测试算法很慢,并出现溢出,另外随机算法rand有些问题。