c++ - 拆分后的空 vector

标签 c++ vector

我正在尝试编写一个基于卡片技巧的简单应用程序。在该应用程序的某些部分,我必须将主甲板交替拆分为较小的甲板。我写了一个简单的循环来做到这一点,但在调用 decks 之后仍然是空的。我在下面粘贴了那部分代码。你知道我哪里弄错了吗?当然,如果你想检查整个程序,你可以这样做 here .该方法由 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);
    }
}

最佳答案

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

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

这样,更改将被保留并且对调用者可见。 现在(按值)传递 vector 的方式,实际上是在函数内部处理它们的拷贝;函数外的实际 vector 没有改变。

而且,是的,请摆脱那些指针(我假设它们在那里用于测试)并直接使用您传递给函数的 vector 。

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

相关文章:

c++ - 信号未发出

c++ - VS2017模板特化报错cannot convert from 'Class *(__cdecl *)(Args...)' to 'Class *(__cdecl *)(Args...)'

opencv - 用cv:Mat填充一个std::vector

java - 如何在 Java 中获取 vector <String> 数组作为返回值?

Java 使用 Vector 类 - Matrix

C++ SQL 查询/为 C++ 封装的 SQL?

c++ - ASSERT_THROW 认为我的异常是不同类型的

C++ 修改这些对象的 vector 中所有对象的给定成员的最佳方法

c++ - 忽略模板特化并显式使用非特化模板 (std::vector<bool>)

c++ - 使用字符串文字初始化非常量参数