C ++数组的问题,函数的开始和结束

时间:2015-12-17 19:22:09

标签: c++ arrays

您好我正在尝试编写一个选择随机数的脚本,然后将该数字排除。

#include <iostream>
#include <ctime>
#include <random>
#include <iterator>

using namespace std;

random_device rd;   // non-deterministic generator
mt19937 gen(rd());  // to seed mersenne twister.
uniform_int_distribution<> dist(1, 52); // distribute results between 1 and 6 inclusive.

int testFunc(int cardArray, int cardArray2, int k) {
    cardArray[k] = dist(gen);

    copy(begin(cardArray), end(cardArray), begin(cardArray2));
    cardArray2[k] = 0;

    bool exists = find(begin(cardArray2), end(cardArray2), cardArray[k]) != end(cardArray2);

    cardArray[k] = dist(gen);

    cout << i + 1 << ": " << cardArray[k] << "    " << exists << endl;

    return 0;
}

int main()
{
    int cardArray[52] = { 0 };
    int cardArray2[52] = { 0 };
    int i = 0;

    for (int n = 0; cardArray[n] == 0 && n < 52; n++) {

        cardArray[i] = dist(gen);

        copy(begin(cardArray), end(cardArray), begin(cardArray2));
        cardArray2[i] = 0;

        bool exists = find(begin(cardArray2), end(cardArray2), cardArray[i]) != end(cardArray2);

        cardArray[i] = dist(gen);

        cout << i + 1 << ": " << cardArray[i] << "    " << exists << endl;
        i++;
    }
    cout << endl;
    cin.ignore();
    return 0;
}

到目前为止,存在一些问题。以下是错误:

  

没有重载函数“end”的实例匹配参数列表

     

没有重载函数“begin”的实例匹配参数列表

     

表达式必须具有指针对象类型

我无法弄清楚出了什么问题。如果它只是在main中,那么函数本身工作正常,但我需要能够调用它。

请告诉我是否需要发布更多信息。

1 个答案:

答案 0 :(得分:2)

您正在使用int来处理int*

int testFunc(int cardArray, int cardArray2, int k)

应该是

int testFunc(int* cardArray, int* cardArray2, int k)

不幸的是,这会阻止std::beginstd::end工作,因为他们需要数组而不是指针。要将数组传递给函数,您需要通过引用获取它们。为此,我们可以使用如下模板:

template<typename T, std::size_t N, std::size_t M>
int testFunc(T (&cardArray)[N], T (&cardArray2)[M], int k)

或者我们可以跳过使用原生数组并使用std::arraystd::vector