7 計算陣列元素個數函式

2022-06-04 19:03:09 字數 1237 閱讀 2541

題目:

編寫乙個模板函式 count,返回值是陣列 a[0: n - 1]的數值個數。測試你的**。

思路:首先,函式計算陣列個數,返回值應該是 size_t 型別,為了簡單起見,將其設為 int 型別。

下面考慮函式引數。一般來說,涉及陣列的問題,需要傳入陣列名和陣列元素個數。這裡需要詳細說明一下關於陣列的知識。

陣列是一系列相同元素的集合,訪問陣列元素,可以通過陣列下標來實現。現在假設有乙個陣列,名字叫 array ,它包含 5 個元素。array[0] , array[1],分別代表陣列的第一,第二個元素。

陣列名實際上是乙個指標,並且是乙個常量指標(它以後不能指向另外乙個陣列),它指向陣列第乙個元素的首位址。也就是說,陣列名實際包含的是乙個位址,並沒有其餘資訊。在傳遞引數時,知道了陣列型別,就可以計算出每個元素的大小;知道陣列名,就知道了起始位址;除此之外,還需要傳入乙個元素個數,這樣就獲得了所需的全部資訊。函式便能夠處理陣列。

但是本題並沒有陣列元素個數,如何獲得?陣列元素的個數可以計算:通過 sizeof(陣列名),可以獲得陣列的大小;通過 sizeof(陣列型別),可以獲得每個元素的大小,於是 sizeof(陣列名)/  sizeof(陣列型別),就獲得了陣列元素的個數。這種方法在函式外行的通,但是當陣列作為引數傳入函式時,陣列名僅僅是乙個指標,此時 sizeof(陣列名)計算出的是指標所佔空間的大小,與陣列大小是無關的,故該法失效。經查詢資料,發現兩個函式可以使用:begin(),end()函式。

**:

1 #include 2

using

namespace

std;

34 template 5

int count_array_size (const t* arr_begin, const t*arr_end)

1112

return

cnt;13}

1415

intmain() ;

17int arr_number =count_array_size(begin(arr), end(arr));

18 cout << "

count :

"<< arr_number <1920

return0;

21 }

解釋**中兩處地方:

第一,引數型別使用的是 const t*,因為不需要修改陣列元素的值。

第二,指標算數運算,是根據它指向的資料型別的大小來的,++指標,意味著它指向下乙個元素單元,而不是下乙個位元組。

階乘計算 陣列

問題描述 輸入乙個正整數n,輸出n 的值。其中n 1 2 3 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相...

python計算數字出現個數

題目 統計數字問題 一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如第6頁用6表示而不是06或006。數字統計問題要求對給定書的總頁碼,計算出書的全部頁碼中分別用到多少次數字0,1,2,3,9。示例 numlist list range...

計算陣列的子集

計算某個陣列的子集 在遞迴中不用 for迴圈和 visit 陣列,因為每個結果長度不一致,如果每個結果長度一致,比如求全排列,則需要用 for和 visit 但後者也可以用記錄層數的方式 public class main list li new arraylist fin nums,li,new ...