gpt4 book ai didi

C++线性搜索算法,判断数组元素个数

转载 作者:行者123 更新时间:2023-12-01 14:09:31 26 4
gpt4 key购买 nike

此代码来自 Geeks for Geeks Algorithms 部分,我不明白这部分

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

在主函数中,特别是为什么使用 sizeof(arr[0]) 的除法会导致数组中实际元素数量的一半。
希望有人可以向我解释这一点。
// C++ code to linearly search x in arr[]. If x 

// is present then return its location, otherwise
// return -1

#include <iostream>
using namespace std;

int search(int arr[], int n, int x)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == x)
return i;
return -1;
}

int main(void)
{
int arr[] = { 2, 3, 4, 10, 40 };
int x = 10;
int n = sizeof(arr) / sizeof(arr[0]);
int result = search(arr, n, x);
(result == -1)? cout<<"Element is not present in array"
: cout<<"Element is present at index " <<result;
return 0;
}

最佳答案

让我们考虑声明的数组

int arr[] = { 2, 3, 4, 10, 40 };

由于未指定数组的大小,因此数组中的元素数等于初始值设定项的数量。

计算元素的数量并不难。它等于 5 .因此该数组由类型为 int 的 5 个元素组成。 .

分配给数组的内存等于 5 * sizeof( int ) .同 5 * sizeof( arr[0] )因为元素 arr[0]有类型 int .

所以你有整个arrau的大小是
sizeof( arr ) = 5 * sizeof( arr[0] )

有了这个公式,很容易确定数组中具有其大小和存储元素大小的元素的数量。那是
5 = sizeof( arr ) / sizeof( arr[0] )

所以有一个任意数组 arr您可以通过以下方式确定元素的数量
N = sizeof( arr ) / sizeof( arr[0] )

函数搜索期望第二个参数将指定传递数组中的元素数
int search(int arr[], int n, int x);

它的计算方式如上所示
int n = sizeof(arr) / sizeof(arr[0]); 
int result = search(arr, n, x);

如果您的编译器支持 C++ 17 标准,那么您可以使用标准函数 std::size 而不是使用此公式。喜欢
int result = search(arr, std::size( arr ), x); 

注意函数声明和定义不好。

例如表达式 sizeof(arr) / sizeof(arr[0])有类型 size_t但是对应的函数参数的类型是 int .型号 int可能不够大,无法存储 size_t 类型的值.其次,由于函数中的数组未更改,因此第一个参数应具有限定符 const .

可以通过以下方式声明和定义该函数
size_t search( const int arr[], size_t n, int x) 
{
size_t i = 0;

while ( i != n && arr[i] != x ) ++i;

return i;
}

如果在数组中未找到目标值,则该函数返回数组的大小为 n。

注意有标准算法 std::find可以代替函数使用。

关于C++线性搜索算法,判断数组元素个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com