从数组中移除元素,然后将其他元素移到上面

Remove element from array then shift other elements over

本文关键字:元素 其他 到上面 然后 数组      更新时间:2023-10-16

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

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

假设你有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;是正确的,因为它总是从末尾"删除"适当数量的元素,但我不能100%确定。

如何正确实现此功能?我看到其他人也提出了类似的问题,但不是为了一次删除潜在的多个元素。我对矢量也一无所知,我不认为在我的程序的其余部分使用它们。

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

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

现场演示

编辑:

添加请求的支票:

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;
  }
}

您只需要几个简单的更改,就可以使用arr[element] = arr[element + count];将元素计数元素向前移动到当前元素。同时将for循环更改为计数到size - count

相关文章: