忽略使用布尔函数

时间:2017-08-10 06:21:06

标签: c++ arrays

我最多可以将100个元素(非负数)加入到数组中。我必须忽略重复元素。我编写的代码基本上采用了每个非负元素,但它不会忽略重复。我写了一个bool函数ifExists:

bool ifExists(int array[], int size, int value)
{
   bool isThere = false;
   for (int i = 0; i < size; i++)
   {
      if (array[i] == value)
      {
         isThere = true;
      }
   }
   return isThere;
}

我在接受用户输入的函数中调用此函数:

void getInput(int myArray[], int &numItem)
{
   int checkNum, number, count;

   cout << "Enter a number (- to quit): ";
   cin >> number;

   count = 0;
   while ((number > 0) && (count < 100))
   {
      if (!ifExists(myArray, numItems, number))
      {
      list[count] = number;
      count++;
      }
      if (count < 100) //&& !checkIfExists(list, numItems, number))
      {
         cout << "Enter a number (negative to quit): ";
         cin >> number;
      }
      else {
         cout << "no more space." << endl;
      }
   }
   numItems = count;
}

我想我写的ifExists错了。我们的想法是getInput应该忽略来自用户的重复输入,只是向我的数组添加唯一值。但是,这不是我打印阵列时发生的情况。任何人都可以帮我判断我的ifExists是否被正确调用了吗?

2 个答案:

答案 0 :(得分:2)

除了循环之后,你不能在任何地方设置numItems的值,因此你的IfExists总是得到值0并且不循环。将其更改为count,它会跟踪数组中的数字。

答案 1 :(得分:0)

您的程序包含n * n次迭代,其中n是元素数。这对于大型数据集来说根本不是高效的。如果不这样做,你可以简单地做一些只有2次迭代的事情。

  1. 遍历数组一次并将这些项添加到地图中。 map结构(key =数组值,value =数组值的计数)。当你在地图中找到一个条目时,将计数加1。
  2. 2.然后在地图中迭代1次,并将地图中所有值为1(单个条目)的元素添加到不应重复的数组中。

    将很快分享示例代码。