您好我正在尝试编写一个选择随机数的脚本,然后将该数字排除。
#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中,那么函数本身工作正常,但我需要能够调用它。
请告诉我是否需要发布更多信息。
答案 0 :(得分:2)
您正在使用int
来处理int*
int testFunc(int cardArray, int cardArray2, int k)
应该是
int testFunc(int* cardArray, int* cardArray2, int k)
不幸的是,这会阻止std::begin
和std::end
工作,因为他们需要数组而不是指针。要将数组传递给函数,您需要通过引用获取它们。为此,我们可以使用如下模板:
template<typename T, std::size_t N, std::size_t M>
int testFunc(T (&cardArray)[N], T (&cardArray2)[M], int k)
或者我们可以跳过使用原生数组并使用std::array
或std::vector