使用C ++返回两个数组

时间:2017-03-19 17:15:30

标签: c++ arrays

大家好我正在尝试将存储在数组中的纸牌游戏切成两半,我只想知道我是否可以使用我的功能返回两个不同的数组

string* couperJeu(int idJoueur, string tab[52]){
    string jeuJoueur1[26];
    string jeuJoueur2[26];

    if (idJoueur == 0){
        for (int i = 0; i < 26; i++) {
            jeuJoueur1[i] = tab[i];
        }
    }
    if (idJoueur == 1){
        for (int y = 26; y < 52; y++) {
            jeuJoueur2[y] = tab[y];
        }
    }
    return(jeuJoueur1, jeuJoueur2);
}

5 个答案:

答案 0 :(得分:1)

如果您使用std::array而不是原始数组,则可以使用

std::array<std::array<std::string, 26>, 2> couperJeu(int idJoueur, string tab[52]) {
    std::array<std::array<std::string, 26>, 2> jeuJoueur;

    // fill jeuJoueur[0]/jeuJoueur[1] instead of jeuJoueur1/jeuJoueur2

    return jeuJoueur;
}

但你不应该。您只填写jeuJoueur1jeuJoueur2,而不是两者都填写。因此,没有理由同时返回。

答案 1 :(得分:1)

由于这是一个C ++问题,您应该使用C ++数据类型,例如std::vector,这将简化您的代码。

const int DECKSIZE = 52;
std::pair<std::vector<card>, std::vector<card> > cut(
                int idPlayer, std::vector<card> arr)
{
    std::vector<card> a;
    std::vector<card> b;

    if (idPlayer == 0)
        for (int i = 0; i < DECKSIZE / 2; ++i)
            a.push_back(arr[i]);

    if (idPlayer == 1)
        for (int i = DECKSIZE / 2; i < DECKSIZE; ++i)
            b.push_back(arr[i]);

    return std::make_pair(a, b);
}

请注意使用DECKSIZE代替幻数5226。这提高了代码的可读性。

但是你建议的代码确实没有意义 - 如果你正在填充其中一个数组,为什么要返回这两个?

http://en.cppreference.com/w/cpp/utility/pair/make_pair

答案 2 :(得分:0)

不,你不能。在c ++中不可能从函数返回两个参数。

您可以尝试使用例如 std :: pair&lt;&gt; 或定义结构以返回两个参数

答案 3 :(得分:0)

执行您需要执行的操作的另一种方法是使两个数组成为全局数组,然后创建一个void函数来执行所需的所有操作。当然你可以使用向量而不是数组,但如果你是c ++的新用户,我推荐数组。

答案 4 :(得分:0)

另一种方法是将引用作为参数传递给函数,或者在C风格的代码中传递指针。然后,该函数可以通过引用修改对象,并且调用者可以看到更改。这样做的好处是,更新阵列比使用深层复制更有效,并且您可以根据需要更新任意数量的对象,而无需管理内存。

另一方面,返回临时vectorstring对象(对临时的引用,这是非法的)将进行优化以提高效率浅拷贝。您还可以通过将其包含在智能shared_ptrunique_ptr中来强制将此行为用于其他类型的参数。并使您的函数通过返回值返回信息,而不是副作用,是一种更加功能的样式,更易于调试和分析。