【发布时间】:2011-05-11 17:21:04
【问题描述】:
例如,如果我有一个包含 5 个输入元素的数组,如果该值已经在变量中建立,我将如何计算该值被输入的次数。
INPUT:
4
4
4
1
2
如果click 被定义为4,那么我将如何计算数组中使用click 的次数?
希望这是有道理的。
谢谢
【问题讨论】:
例如,如果我有一个包含 5 个输入元素的数组,如果该值已经在变量中建立,我将如何计算该值被输入的次数。
INPUT:
4
4
4
1
2
如果click 被定义为4,那么我将如何计算数组中使用click 的次数?
希望这是有道理的。
谢谢
【问题讨论】:
由于您已将问题标记为 C++,因此这是使用 STL 的正确 C++ 答案。
int num = std::count(&array[0], &array[5], click);
【讨论】:
&array[5] 真的有效吗?我知道推迟和使用 address-of 会导致未定义的行为(如&(*(array + 5)))。
array+5 而不是&array[5]?即...int num = std::count(array, array+5, click);
array + 5 完全没问题,但做 array[5] 不是,即使它只是应用地址操作符来获得等价物。在大多数情况下,它会被编译器优化掉(&*(array+5) 将被编译器转换为array+5),从而产生某种预期的未定义行为,但它仍然是未定义行为。再举一个例子,如果数组包含一个用户定义的类型T,而不是ints,那么它很可能在不是T 的内存区域上重载T::operator&。标准在这里不做例外,就是UB。
这就是使用 C 样式数组的方式。
int i;
int count = 0;
for(i = 0; i < ARRAYSIZE; ++i)
{
if(array[i] == click)
++count;
}
ARRAYSIZE 是您的静态分配数组的大小,array 您的数组变量,然后单击您要查找的值。在count 中保存了变量的计数。
【讨论】:
你可以使用count。
类似这样的东西(对不起,我不熟悉 C++):
#include <algorithm>
void someFunction() {
int input[5];
// initialize input with some values
int num = std::count(&input[0], &input[5], 4);
}
【讨论】:
如果没有排序,那么线性搜索是你唯一的选择。
【讨论】: