作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有两个问题,第二个是可选的。首先,在下面的程序(一个简单的卡片程序的原型(prototype))中,我得到以下错误:
(29): error C2660: 'shuffle' : function does not take 1 arguments with the following code:
#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 points for answering this or指出任何可怕的糟糕编码实践,不包括缺少类)
提前致谢!
最佳答案
您收到该错误的原因是因为您声明 shuffle
为不接受任何参数的函数。
void shuffle();
另一个注意事项是,您可能希望在该函数中获取对双端队列的引用,否则您将打乱本地拷贝并且不会产生预期的副作用。
您可能希望它看起来像这样:
void shuffle(deque<int>& dq);
此外,您可能希望使用 iter_swap
而不是 swap
来交换元素。在 dequeue 中它可能不会有什么不同,但对于 list
或 map
它会。
关于用于双端队列索引的 C++ swap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7343184/
我是一名优秀的程序员,十分优秀!