从数组中删除元素然后移动其他元素

时间:2014-10-18 18:25:47

标签: c++ arrays

这是我在这里的第一个问题,我很高兴能成为社区的一员。

我有动力在这里发布一个带有删除功能的严重问题。我试图删除使用索引和计数关键字我试图从数组中删除元素条。我在纸上画出了不同的场景,但发现没有明显的模式,所以我不得不在这里问。

让我们说你有     char array[] = {'A','B','C','D','E'}; 我的函数remove有这个原型 void remove(char arr[], int& size, int element, int count)

如果要编写一个已经声明大小的remove(array, size, 2, 2),那么如果打印,则阵列必须打印ABE。该函数必须转到索引2,然后删除两个元素,然后将其他元素移开。

这是我试图实现的功能:

void remove(char arr[], int& size, int element, int count) {
for (int i = element;  i < count; i++) {
    arr[element] = arr[element + 1];
}
size = size - count; }

我可以编写适合特定测试用例的函数,但我不能将其概括为适用于所有不同的输入。我很确定size = size - count;是正确的,因为它始终“删除”了最后的适当数量的元素,但我不是百分百肯定。

如何正确实现此功能?我看到其他人提出了类似的问题,但不是一次性删除多个元素。我也没有对矢量的了解,我不认为使用它们会对我的其余程序起作用。

2 个答案:

答案 0 :(得分:0)

您只需要进行一些简单的更改,将元素计数元素向前移动到arr[element] = arr[element + count];的当前元素。同时更改for循环以计算到size - count

答案 1 :(得分:0)

您可以按以下方式使用std::rotate

void remove(char arr[], int& size, int element, int count) {
  std::rotate(arr + element, arr + element + count, arr + size);
  size = size - count;
}

LIVE DEMO

编辑:

添加请求的支票:

void remove(char arr[], int& size, int element, int count) {
  if(element < size) {
    if(count + element > size) count = size - element;
    std::rotate(arr + element, arr + element + count, arr + size);
    size = size - count;
  }
}