作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
提前致谢!
所以我试图将一个数组传递给一个函数,但我遇到了麻烦。
我的数组声明如下:
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>
是一个不同于 say 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/
我是一名优秀的程序员,十分优秀!