gpt4 book ai didi

用于双端队列索引的 C++ swap()

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:25 27 4
gpt4 key购买 nike

我有两个问题,第二个是可选的。首先,在下面的程序(一个简单的卡片程序的原型(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 中它可能不会有什么不同,但对于 listmap 它会。

关于用于双端队列索引的 C++ swap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7343184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com