c++ - 如何将 array<int, 6> 传递给函数

标签 c++ arrays function

提前谢谢您!

所以我尝试将数组传递给函数,但遇到了麻烦。

我的数组声明如下:

array<int, 6> yourNumbers {0,1,2,3,4,5};

我试图将它传递给一个函数来检查重复的数字。我这样做是因为我想要一个可以重用的函数来检查不同的数组。有任何意见吗?

这是我到目前为止的代码。但您可以在 checkPrevNum() 函数中看到它仅限于迭代预定数组 randomNums。我想要它,以便我可以将任何我想要的数组传递给要检查的函数。我对 C/C++ 比较陌生。

int getNum(){
int numSelection = 0;

do {
numSelection = (rand() % 69) + 1;
} while (checkPrevNum(numSelection) == true);

return numSelection;
}

bool checkPrevNum(int prevNum){
for (int i = 0; i < 5; i++){
    if (prevNum == randomNums[i]){
        return true;
    }
}
return false;
}

最佳答案

array<int, 6>是与 array<int, 7> 不同的静态类型,因此需要一个模板化函数来直接处理:

template <typename T, size_t N>
void check_duplicates(const std::array<T, N>& a)
    ...

或者,调用者可以传递指向第一个元素的指针和大小。如果您只需要支持一种元素类型:

void check_duplicates_2(const int*, size_t n)
    ...

// caller:
check_duplicates_2(&yourNumbers[0], yourNumbers.size());

如果您想支持不同类型:

template <typename T>
void check_duplicates_3(const T*, size_t n)
    ...

// caller:
check_duplicates_3(&yourNumbers[0], yourNumbers.size());

如果check_duplicates函数实现特别长,并且您使用许多不同的数组大小调用它,您可能需要使用分层方法来最小化代码膨胀:

template <typename T, size_t N>
void check_duplicates(const std::array<T, N>& a)
    { return check_duplicates_3(&a[0], a.size()); }

关于c++ - 如何将 array<int, 6> 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33249258/

相关文章:

c - 如何创建一个程序,要求用户输入 "up to"20 个整数,并使用传递给函数的参数来输出最大值、最小值和平均值?

java - 从 Main 获取随机函数

c++ - clang 编译的程序在 std::any_cast 期间抛出 std::bad_any_cast

c++ - 在源文件中定义但在任何函数定义之外的变量的范围是什么?

c++ - C/C++ 中 assert(false) 的更好替代方案

javascript - 当我的配置文件中有一个普通数组时,我应该如何使用 jQuery extend?

arrays - 无法将 tibble 转换为 R 中的数组?

c++ - Boost Thread在创建为类的成员函数时不会分离

arrays - Angular 7 : custom class decorator destroy component scope

php - WordPress的functions.php函数执行顺序