【发布时间】:2015-01-22 22:16:54
【问题描述】:
作为一个课程项目,我正在构建一个彩票机模拟器,其中包含不同种类的奖品。
我有一个名为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 函数应该对数组进行排序并使其超出函数范围。
【问题讨论】:
-
请不要使用异或交换方法,它在可读代码中没有位置,几乎肯定不会比临时变量快。
-
@paxdiablo 这似乎是我应该遵循的合理建议。谢谢
标签: c++ sorting vector scope pass-by-reference