2014-11-25 126 views
0

作爲課程項目,我正在構建一個具有不同種類獎品的彩票機模擬器。無法對C++中的類/對象的向量成員變量進行排序

我有一個名爲LotteryTicket的類,其中包含一個vector<int> luckyNumbers作爲其私有成員變量之一。爲了訪問它,我定義了一個get函數,如下所示:

vector<int> LotteryTicket::getLuckyNumbersList() 
{ 
    return luckyNumbers; 
} 

我需要做的事情之一是檢查獲獎票。 「銅牌」獲勝者是設法猜出所有正確數字的人,但沒有按照正確的順序。換句話說,這些集合必須匹配。爲了做到這一點,我想這兩個門票(中獎號碼和玩家的數字)進行排序,然後檢查1 1

我嘗試使用以下功能對它們進行排序:

void LotteryMachine::sortTicket(LotteryTicket& ticket) 
{ 
    for(int i = ticket.getLuckyNumbersList().size()-1; i >= 0; i--) { 
     for(int j = 0; j < i; j++) { 
      if(ticket.getLuckyNumbersList()[j] > ticket.getLuckyNumbersList()[j+1]) 
       swap(ticket.getLuckyNumbersList()[j], ticket.getLuckyNumbersList()[j+1]); 
     } 
    } 

    cout << endl << "Sorted ticket " << ticket.getTicketNumber() << ":"; 
    printTicket(ticket); 
} 

//sorting by bitwise operations 
void LotteryMachine::swap(int& a, int& b) 
{ 
    a ^= b; 
    b ^= a; 
    a ^= b; 
} 

我有cout作爲測試,看看我的載體是否確實排序。到目前爲止沒有運氣。我懷疑我在某些時候失去了參考,但我不知道在哪裏......或者我可能會在所有這些長點符號返回中弄亂一些東西......

對於其他上下文, sortTicket(LotteryTicket&)函數在檢查票證是否爲銅牌贏家的函數中調用。這個提到的函數接收來自不同函數的參數ticket ...即通過參數的長鏈,所有這些都通過引用進行調用(如果需要,我可以粘貼更多代碼)。

任何想法? sortTicket函數應對數組進行排序並使其超出函數的範圍。

+3

請不要使用xor swap方法,它在可讀代碼中沒有位置,幾乎肯定不會比temp變量更快。 – paxdiablo 2014-11-25 02:28:08

+0

@paxdiablo這聽起來像是一個很好的建議,我應該遵循。謝謝 – 2014-11-25 02:30:18

回答

3
vector<int> LotteryTicket::getLuckyNumbersList() 

您在getLuckyNumbersList()由於您沒有返回引用而返回時創建了副本。

改爲改爲以下內容。

vector<int>& LotteryTicket::getLuckyNumbersList() 
+0

我懷疑這樣的事情。這不會返回一個需要用指針捕捉的地址嗎? – 2014-11-25 02:28:52

+2

@GilDekel:不,它返回一個引用。這就是'&'的意思。指針會是'*'。 – 2014-11-25 02:29:43

+0

你真棒!謝謝! - 只要stackoverflow允許,我會盡快接受這個答案。 – 2014-11-25 02:32:50

相關問題