2014-11-25 79 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

相关问题