[英]Get the number of elements that it has a value in array
我有一個如下的數組
int arr[32];
該數組可以包含32個元素。
如果我將一些數據添加到該數組中,如下所示
arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
如您所見,我將數據添加到元素0,1,2,3
,而其他元素仍未初始化或為空。
現在,如何獲取僅包含數據的元素計數?
在當前示例中,將獲得4個元素。
您可以通過多種方式執行此操作-一種是保持初始化值的計數:
arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
n = 4;
僅當您順序填充數組時,此方法才有效。
另一種方法是使用一些值初始化數組,這些值在語義上不能成為數組的元素:
int arr[32] = {-1};
之后,您可以檢查當前元素是否包含不同於-1
值。
示例循環可以這樣實現:
for(i = 0; i < 32 && arr[i] != -1; i++)
{
// do things
}
另外,正如@Jongware在評論中指出的那樣-如果您不介意花費O(n)的額外空間-您可能會有其他標志數組:
int fill[32] = {0};
arr[0] = 5; fill[0] = 1;
arr[1] = 10; fill[1] = 1;
arr[2] = 15; fill[2] = 1;
arr[3] = 20; fill[3] = 1;
如果這對您很重要,則可以使用位集節省一些空間。
int arr[32]={0};
int c=0;
arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
for(int i=0; i<32; i++){
if(arr[i]){
c=c+1;
}
printf("count is %d",c);
}
這就是我會嚴格列出可能分配的元素的方式。 這將創建一次寫入數組。
int arr[32];
int assignedOrder[32];
int assignedOrderIndex = 0;
int assign (int index, value)
{
int i;
if (index < 0 || index >= 32)
return E_FAIL;
if (assignedOrderIndex == 32)
return E_FAIL;
for (i=0; i<assignedOrderIndex; i++)
if (assignedOrder[i] == index)
return E_FAIL;
arr[index] = value;
assignedOrder[assignedOrderIndex] = index;
assignedOrderIndex++;
return E_SUCCESS;
}
某種程度上,這似乎是您應該升級到C ++的感覺,因為有些標准對象恰好具有此功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.