【问题标题】:Unable to sort a vector member variable of a class/object in C++无法在 C++ 中对类/对象的向量成员变量进行排序
【发布时间】: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&amp;) 函数是从函数内部调用的,用于检查门票是否为铜牌获胜者。上面提到的函数接收来自不同函数的ticket 参数......即传递参数的长链,所有这些都通过引用调用(如果需要,我可以粘贴更多代码。)

有什么想法吗? sortTicket 函数应该对数组进行排序并使其超出函数范围。

【问题讨论】:

  • 请不要使用异或交换方法,它在可读代码中没有位置,几乎肯定不会比临时变量快。
  • @paxdiablo 这似乎是我应该遵循的合理建议。谢谢

标签: c++ sorting vector scope pass-by-reference


【解决方案1】:
vector<int> LotteryTicket::getLuckyNumbersList()

getLuckyNumbersList() 返回时您制作了一份副本,因为您没有返回参考。

改为以下。

vector<int>& LotteryTicket::getLuckyNumbersList()

【讨论】:

  • 我在怀疑类似的事情。那不会返回一个需要用指针捕获的地址吗?
  • @GilDekel:不,它返回一个引用。这就是&amp; 在这里的意思。指针是*
  • 你太棒了!谢谢! - 只要 stackoverflow 允许,我就会接受这个作为答案。
猜你喜欢
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多