天天看點

數組元素個數統計

編寫一個靜态方法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語言初始值為随機值)。

繼續閱讀