首页 > 解决方案 > 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 如何提供帮助的逻辑。

标签: c++arraysdynamicelement

解决方案


并非所有索引都被赋值

实际上,在某些情况下,如果没有初始化或分配,它们中的一些可能具有“未指定的值”(并且读取所述值的程序将具有未定义的行为)。

所以,我们可以说这些元素“没有被赋值”。但我不会这样做,原因有两个:

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

这与您正在考虑的“尚未被赋予价值”完全不同。所以,我建议你这样想:所有数组元素都存在,总是. 您可以使用其他容器来按需添加元素,或者选择您自己的方式来指定值当前是否对您的算法“有效”。

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


推荐阅读