編寫一個靜态方法histogram(),接受一個整型數組a[]和一個整數M為參數并傳回一個大小為M的數組,其中第i個元素的值為整數i在參數數組中出現的次數。如果a[]中的值均在0到M-1之間,傳回數組中所有元素之和應該和a.length相等。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
vector<int> histogram(T& a,int N) {
int length = sizeof(a) / sizeof(a[0]);
sort(a, a + length);
vector<int> arrayInt;
if (0 <= a[0] && a[length-1] <= N - 1) {
arrayInt.resize(N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i] == j + 1) {
arrayInt[j + 1]++;
break;
}
}
}
}
else {
arrayInt.resize(length);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i] == j + 1) {
arrayInt[j + 1]++;
break;
}
}
}
}
return arrayInt;
}
int main()
{
vector<int> p,m;
int b[] = { 2,5,3,6,2,1,4,5,9,8 };
int a[] = { 2,5,3,6,2,1,4,5,9,8,9,20,30 };
p = histogram(a, 13);
m = histogram(b, 10);
return 0;
}
使用vector可以動态的根據函數傳入的參數來生成指定大小的數組,再使用resize()函數,即可将數組大小置為指定大小,切初值置為0(注意:C++裡是初始化為0,C語言初始值為随機值)。