我有两个问题,第二个是可选的。首先,在下面的程序(一个简单卡片程序的原型)中,我收到以下错误:
(29): 错误 C2660: 'shuffle' : 函数不接受 1 个参数,代码如下:
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <deque>
#include <algorithm>
using namespace std;
deque<int> cardDeck (51);
void flip(); //Prototype flip()
void shuffle(); //Prototype shuffle()
int _tmain(int argc, _TCHAR* argv[])
{
ostream& operator<<(ostream& os, deque<int> dq); //overload << operator to accept deque
//arguments
for (int a=52; a>0; a--) { //initialize the 52 cards in a deck
cardDeck.push_front(a);
}
flip(); //prompt my input to check data
return 0;
}
void flip() { //flip over card in specified location in the deck
int input;
cin >> input;
cout<<cardDeck[input]<<endl;
shuffle(cardDeck);
flip();
}
void shuffle(deque<int> dq) { //use Fisher-Yates algorithm to efficiently and accurately
//randomize card order
for(int i=dq.size()-1; i>-1; i--) {
int j = rand() % (i + 1);
if(i != j) {
swap(dq[j], dq[i]);
}
}
}
为什么我会收到此错误?(我环顾四周并试图自己解决)
其次,我不确定我是否正确地使用了 Fisher-yates 算法,因为在上面不容易找到 c++ 文档(对于使用 swap() 的版本;)(Brownie 指出回答这个问题或指出任何非常糟糕的编码实践,不包括缺少类)
提前致谢!