使用指针添加/删除函数内部数组中的元素

时间:2017-04-24 01:08:55

标签: c++ arrays pointers

我试图解决这个问题。这是一个项目,我们的教师需要这个标题。我让检查功能正常工作,但添加到数组时我们必须使用指针。我的理解是我们应该将这个数组复制到另一个数组并替换指针。例如,Array1 {1,2,3}然后将其复制到Array2 {1,2,3,4},然后添加4以展开数组。不幸的是,我发现研究的所有内容..向量和其他函数将更适合此任务,但我们只需要使用指针和大小来调整大小并添加元素。

// returns the index of the element in "arrayPtr" of "size"
// that corresponds to the element holding "number"
// if number is not in the array, returns -1
int check(int *arrayPtr, int number, int size);

// adds "number" to the array pointed to by "arrayPtr" of "size". 
// if the number is not already there, if "number" is there - no action
// Note, the size of the array is thus increased. 
void addNumber(int *& arrayPtr, int number, int &size);

// removes a "number" from the "arrayPtr" of "size".
// if "number" is not there -- no action
// note, "size" changes
void removeNumber(int *& arrayPtr, int number, int &size);

到目前为止,我有这个:

// returns the index of the element in "arrayPtr" of "size"
// that corresponds to the element holding "number"
// if number is not in the array, returns -1
int check(int *arrayPtr, int number, int size) {
    for (int i = 0; i < size; i++) {
        if (arrayPtr[i] == number) {
            return i;
        }
    }
    return -1;
}

// adds "number" to the array pointed to by "arrayPtr" of "size". 
// if the number is not already there, if "number" is there - no action
// Note, the size of the array is thus increased. 
void addNumber(int *& arrayPtr, int number, int &size) {
    if (check(arrayPtr, number, size)==-1) {
//add the element to the end of the array

    }
    //did not run if -1 
}

// removes a "number" from the "arrayPtr" of "size".
// if "number" is not there -- no action
// note, "size" changes
void removeNumber(int *& arrayPtr, int number, int &size) {


}

任何有关如何进行的提示或提示或建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

更清楚你要构建的是一个类似数据结构的集合(因为你避免重复)。

您的代码中的另一件事是您为此目的分配了大量内存,而您只需使用arrayPtr和size访问它。 如果是这种情况您可能正在维护MAX_MEMORY_SIZE。

之类的东西
  #define MAX_MEMORY_SIZE 1000000

有这个假设,

addNumber算法:

  1. 如果size + 1&gt; = MAX_MEMORY_SIZE,则返回“溢出或最大内存”。例外
  2. 检查是否存在新元素
  3. 如果找到,不做任何事情,只需返回
  4. 如果未找到,请复制新元素@ arrayPtr [size](arrayPtr [size] = number)。 (您可以选择按顺序保留它们,以便您的搜索也有效。为此,您的检查功能和实施必须不同)
  5. 增加尺寸
  6. removeNumber算法:

    1. 检查是否存在给定元素
    2. 如果找不到,请不要做任何事情,只需返回
    3. 如果找到,则循环所有元素数组并向左移动1个位置。代码如下。
    4. 减小尺寸
    5. 希望这会带你到更高的水平。

      position = check(arrayPtr, number, size);
      for (i = position; i < size-1; i++) {
           arrayPtr[i] = arrayPtr[i+1];
      }