C++ 一次遍历的方案
虽然上面的函数可以完成指定工作,但是它的效率比较低。每一次调用howMany函数时它都要将整个数据内容遍历一次。在下面的程序中,我们需要将数据遍历十次。
我们要设计一个函数,使其将数据遍历一边就能完成工作。对数据中的每一个值,我们可以将其对应的计数存储点找出,并将其自增一。换句话说,我们使用向量中的值作为直方图的下标。下面是对应方法设计的程序:
apvector<int> histogram (upperBound, 0);
for (int i = 0; i<numValues; i++) {
int index = vector[i];
histogram[index]++;
}
第一行对统计值进行初始化直方图的值为0。通过这样,我们就可以在循环体里通过++操作符进行对直方图增长。我们知道我们让它会从0开始。而忘记初始化计数器是一个常见的错误。
作为一练习,可以将以上的代码封装设计好,组合成一histogram函数,输入一个向量并统计值范围(这里是0到10),返回值就是向量中的统计直方图。