计算数组中的元素而不是数组大小

时间:2019-04-07 05:11:47

标签: c++ arrays

我意识到sizeof(arr)/sizeof(arr[0])返回数组的大小,而不是数组中元素的实际数量。

   int main(void) 
{

    int a = 1;
    int b = 2;

    int arr[5] = {a, b};

    int arrcount = sizeof(arr)/sizeof(arr[0]);

    printf("Array Size: %d\n", arrcount);

    return EXIT_SUCCESS;

}

arrcount在这里等于5。在这种情况下,有没有办法在不更改数组大小的情况下使元素数量等于2

1 个答案:

答案 0 :(得分:2)

  

我意识到sizeof(arr)/sizeof(arr[0])返回数组的大小,而不是数组中元素的实际数量。

当您说 数组中元素的实际数量 时,我认为您的意思是已明确初始化为零以外的其他元素的数量。

唯一的方法是迭代数组的元素并计算通过某个过滤器的元素的数量。

int count = 0;
for ( int item : arr )
{
  if ( item != 0 ) // This is a filter
    ++count;
}

标准库为此提供了一个功能std::count_if

int count = std::count_if(std::begin(arr), std::end(arr),
                          [](int item) -> bool { return item != 0; });