C++ 分割后的空向量

C++ 分割后的空向量,c++,vector,C++,Vector,我正在尝试编写一个基于卡片技巧的简单应用程序。在该应用程序的某些部分,我必须交替地将主甲板拆分为较小的甲板。我编写了一个简单的循环来实现这一点,但在调用deck之后仍然是空的。我将这部分代码粘贴到下面。你知道我哪里出错了吗?当然,如果你想检查整个程序,你可以这样做。该方法由Deck类的“main”实例调用,较小的Deck是该方法的参数 void split_deck(Deck one, Deck two, Deck three, Deck four, int time) { De

我正在尝试编写一个基于卡片技巧的简单应用程序。在该应用程序的某些部分,我必须交替地将主甲板拆分为较小的甲板。我编写了一个简单的循环来实现这一点,但在调用deck之后仍然是空的。我将这部分代码粘贴到下面。你知道我哪里出错了吗?当然,如果你想检查整个程序,你可以这样做。该方法由Deck类的“main”实例调用,较小的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);
    }
}
void split_甲板(第一甲板、第二甲板、第三甲板、第四甲板,国际时间)
{
甲板*开=&1;
甲板*tw=&tw;
甲板*th=&3;
甲板*fo=&4;
打开->dck.clear();
tw->dck.clear();
th->dck.clear();
fo->dck.clear();
int buff;
对于(int i=0;i<24;i++)
{
buff=dck[i];
如果(i%time==0)打开->dck.向后推(buff);
如果(i%time==1)tw->dck.push_back(buff);
如果(i%时间==2)th->dck.push_back(buff);
如果(i%time==3)fo->dck.push_back(buff);
}
}

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

 void split_deck(Deck& one, Deck& two, Deck& three, Deck& four, int time)
这样,更改将被保留并对调用方可见。 现在传递向量的方式(按值),基本上是在函数内部处理向量的副本;函数外的实际向量不变


而且,是的,请去掉这些指针(我假设它们是用于测试的),直接使用传递给函数的向量。

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

 void split_deck(Deck& one, Deck& two, Deck& three, Deck& four, int time)
这样,更改将被保留并对调用方可见。 现在传递向量的方式(按值),基本上是在函数内部处理向量的副本;函数外的实际向量不变


而且,是的,请去掉这些指针(我假设它们是用于测试的),并使用直接传递给函数的向量。

您已按值传递了所有组,这意味着这些都是在函数结束时消失的副本。还有,指针是怎么回事?@NathanOliver我暗自怀疑OP认为“我想修改原件,我需要一个指向它的指针”,但没有考虑到拷贝已经发生了(因为正如您所提到的,按值传递)。附言:一个参考会更好。什么是
buff=dck[i]?我使用指针,因为我相信它可以解决空向量的问题。在以前的版本中,我是这样写的:“one.dck.push_back(buff)”,但我担心句点的数量。@Jonas Wielicki dck是调用该方法的实例向量。您可以在附带的链接中进行检查。您已通过值传递了所有组,这意味着这些都是在函数结束时消失的副本。还有,指针是怎么回事?@NathanOliver我暗自怀疑OP认为“我想修改原件,我需要一个指向它的指针”,但没有考虑到拷贝已经发生了(因为正如您所提到的,按值传递)。附言:一个参考会更好。什么是
buff=dck[i]?我使用指针,因为我相信它可以解决空向量的问题。在以前的版本中,我是这样写的:“one.dck.push_back(buff)”,但我担心句点的数量。@Jonas Wielicki dck是调用该方法的实例向量。你可以在附带的链接中查看。你还应该建议他删除所有不需要的指针。你还应该建议他删除所有不需要的指针。