【问题标题】:How to pass array<int, 6> to function如何将 array<int, 6> 传递给函数
【发布时间】:2015-10-21 01:00:55
【问题描述】:

提前谢谢你!

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

我的数组声明如下:

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;
}

【问题讨论】:

  • 你如何将它传递给不起作用的函数?你得到什么错误?

标签: c++ arrays function


【解决方案1】:

array&lt;int, 6&gt; 是不同于 array&lt;int, 7&gt; 的静态类型,因此需要一个模板函数来直接处理:

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()); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多