C ++如何编写函数以检查元素是否存在于动态分配的数组中

时间:2019-02-03 21:56:00

标签: c++ arrays dynamic element

首先,这是一个赋值,只能使用动态分配的数组(不能使用向量或映射)。我收到的提示是创建另一个数组(不确定是否分配了所有元素,我不确定)并与原始数组进行比较。

因此,原始数组的动态分配容量为50。 我无法为myArray分配值或提供默认值。

int *myArray = new int[50];

并非所有元素都存在于每个索引中。 myArray可能存在0、10或50个元素。我不知道存在多少个元素或在哪里。通过“不存在”,我意味着给定索引处的元素尚未初始化。

假设存在两个元素:

myArray [0] = 10;
myArray [1] = 20;

目标是编写具有3个要求的bool isPresent(int index)函数:

如果索引太大(在这种情况下大于49),则返回false;

如果元素存在于isPresent(int index)上,则返回true。

如果不存在给定索引处的元素,则返回false。

bool isPresent(int 0){}//this should return true
bool isPresent(int 1){}//this should return true
bool isPresent(int 3){}//this should return false
bool isPresent(int 49){}//this should return false
bool isPresent(int 50){}//this should return false

请帮助我完成bool isPresent()函数。 对于我可以创建以帮助我的第二个数组,没有要求如何做。我也许可以执行以下操作,但是我不确定该如何做:

int *myArray2 = new int[50];
for (int i = 0; i < 50; i++)
{
    myArray2[i] = 100;//so I'm assigning 100 to every element for myArray2
                      //to compare?
}

bool isPresent()函数在我需要编写的数组类下。给定的测试代码(我无法更改)位于主要位置。从main,将创建我的数组类的对象,并将不同的元素从main分配给isPresent()。

1 个答案:

答案 0 :(得分:0)

您有一个动态分配的整数数组

int* myArray = new int[size]; // where 'size' is the number of the elements in the array

isPresent()函数必须检查给定索引处是否存在值。

第一个简单的解决方案是像这样默认初始化所有数组元素:

int* myArray = new int[size]();

因此数组中的所有元素的默认值均为0。

然后isPresent()函数仅需检查该数组在该特定索引处的元素是否为0

if(myArray[index]==0) 
   return false;
return true;

此实现的问题是我们将0视为标志而不是值。如果用户只是想将0放在索引5处怎么办?然后我们的算法只会声明索引5处没有元素,对吧?

另一种简单但天真的解决方案是选择另一个值而不是0(也许是-999)...但是由于与我上面解释的相同原因,这显然是一个糟糕的解决方案,除非,否则您的数组应该只包含正值!

如果使用结构体不是问题,建议您检查this answer