두 개의 질문이 있는데, 두 번째 질문은 선택 사항입니다.큐 인덱스의 C++ 스왑()
(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();)을 사용한다. (이것에 대답하거나 클래스의 부족을 포함하지 않는 무서운 코딩 습관을 지적하기위한 브라우니 포인트)
미리 감사드립니다! 함수가 복용하지
엄청나게 끔찍한 코딩 방법을 지적 해 주겠다는 제안을 받아 들인다 : 1)'_tmain' 대신에'main'을 사용하십시오.'_tmain'은 불필요하게 코드의 이식성을 제한합니다. 2)'void shuffle (deque & dq)'를 사용하십시오. 그렇지 않으면 프로그램은 deque를 복사하고 그 내용을 섞습니다. 3) 파일 범위에서'namespace std'를 사용하지 마십시오. 이름을 완전하게 한정하거나 함수의 범위 내에서'using '을 사용하는 것을 선호합니다. 4) deques를 인쇄하려면 [this] (http://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers)를보십시오. 5)'shuffle'은 정확하지만'std :: random_shuffle'으로 구현 될 수 있습니다. –
Mankarse
너무 많이 걱정하지 마십시오. 그 점들 중 실제로 끔찍한 점은 하나도 없습니다. ;) – Mankarse
피드백을위한 Thnx입니다. 알고리즘에 대해 확신 할 수없는 이유는 데크에 0을 많이 넣었 기 때문 이었지만 'deque.erase'를 호출하면 cardDeck [52]보다 위에있는 0이 제거되었습니다. 나는 그것을 자주 바꾸는 것이 번거롭기 때문에 _tmain을 사용합니다. 나는 단지 역 참조 (dereferencing)와 관련된 용어에 대해서만 언급했고 그 이후로 구현했다. '네임 스페이스 사용하기'에 관해서는 편의를 위해 사용하는 것뿐입니다.하지만 더 큰 프로그램에서는 공개하거나 공개 할 수도 있습니다. 'std ::'를 사용합니다. 5 번째 장래에 나에게 매우 유용 할 것입니다. 감사합니다 ^^ – Aarowaim