C++如何确定元素是否存在于动态分配的数组中



假设我有一个容量为50的动态分配数组。

int *myArray = new int[50];

我需要编写一个calAverage函数来计算该数组中元素的平均值。

并非所有索引都已分配值。myArray可能分配了0、10或50个值。我不知道值被分配了多少,也不知道在哪里。

这是我的calAverage函数:

int calAverage()
{int sum = 0;
int avg = 0;
for (int i=0;i<50;i++)
{
if (element i is present) {sum+=myArray[i];i++}
}

我走对了吗?请帮我完成calAverage函数。

我不能使用矢量或贴图,因为这是一个赋值,而且是不允许的。我收到的提示是创建一个并行数组,并将两者进行比较,以检查是否分配了元素。IDK如何帮助的逻辑。

正如Lightness编写的注释和答案一样,您无法真正检查元素是否已被赋值。但是,您确实说过可以使用并行数组来帮助您。如果你用int代替呢?向数组中添加值时,请递增随数组一起传递的计数器。然后,该计数器将保存数组中已使用部分的"长度"。可能不理想,但它会起作用。类似这样的东西:

#include <iostream>
double calAverage(int*, int);
int main()
{
int *myArray = new int[50];
int myArrLength = 0;
double avg;

// add values to array
for (int i = 0, add = 5; add > i; i++)
{
myArray[i] = i;
myArrLength++;
}
avg = calAverage(myArray, myArrLength);
return 0;
}
double calAverage(int *arr, int len)
{
int sum = 0;
for (int i = 0; i < len; i++)
{ 
sum += arr[i];
}
return sum / static_cast<double>(len);
}

并非所有索引都分配了值

事实上,在某些条件下,如果不初始化或分配,其中一些可能具有"未指定的值"(读取所述值的程序将具有未定义的行为)。

所以,我们可以说这些元素"没有被赋值"。但我不会这么做,原因有二:

  1. 您无法检测到,并且
  2. 这并不意味着这些元素不存在

这与你所想的"尚未分配值"不同。所以,我建议你这样想:所有数组元素都存在,总是。您可以使用其他容器按需添加元素,也可以选择自己的方式来指定值当前是否对您的算法"有效"。

如果您想要x→的列表;y映射,其中x不连续,也许您应该考虑std::map(尽管这确实带来了它自己的问题,即它可能更慢)。或者,如果这些值永远不会被视为"真实"值,那么您可以使用某种哨兵值,如-1

最新更新