我正在尝试根据纸牌技巧编写一个简单的应用程序。在该应用程序的某些部分中,我必须将主甲板交替拆分为较小的甲板。我编写了一个简单的循环来执行此操作,但是调用卡座后仍然是空的。我在下面粘贴了那部分代码。你知道我犯错了吗?当然,如果您要检查整个程序,可以执行here。该方法由Deck类的“主要”实例调用,较小的Deck是该方法的参数。

    void split_deck(Deck one, Deck two, Deck three, Deck four, int time)
{
    Deck* on=&one;
    Deck* tw=&two;
    Deck* th=&three;
    Deck* fo=&four;
    on->dck.clear();
    tw->dck.clear();
    th->dck.clear();
    fo->dck.clear();
    int buff;

    for (int i = 0; i < 24; i++)
    {
        buff = dck[i];
        if (i%time == 0) on->dck.push_back(buff);
        if (i%time == 1) tw->dck.push_back(buff);
        if (i%time == 2) th->dck.push_back(buff);
        if (i%time == 3) fo->dck.push_back(buff);
    }
}

最佳答案

要扩展Nathan的评论,您应该通过引用传递向量:

 void split_deck(Deck& one, Deck& two, Deck& three, Deck& four, int time)


这样,更改将被保留并对调用者可见。
现在通过矢量传递矢量的方式(按值),实际上是在函数内部处理它们的副本。函数外部的实际矢量不会更改。

而且,是的,请摆脱那些指针(我想无论如何它们都在那里进行测试),并直接使用传递给函数的向量。

关于c++ - 分割后的空 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39727308/

10-13 04:45