如何在 C++ 中使用两次遍历和一次遍历从数组中删除元素?


两次遍历

首先,让我们定义原始数组以及要搜索和从数组中删除的元素:

int ele = 5;
int arr = [1,2,3,4];

现在,我们循环遍历数组以查找给定元素:

for (i=0; i<length; i++)
   if (arr[i] == ele) break;

如果找到给定元素的位置,则我们将右侧元素向左移动:

if (i < length) {
   length--;
      for (int j=i; j<length; j++)
         arr[j] = arr[j+1];
}

示例

让我们看下面的实现,了解如何在两次遍历中删除数组中的元素:

在线演示

#include<iostream>
using namespace std;

int main() {
   int arr[] = {11, 15, 6, 8, 9, 10};
   int length = sizeof(arr)/sizeof(arr[0]);
   int ele = 6;

 int i;
   for (i=0; i<length; i++)
      if (arr[i] == ele) break;

   if (i < length) {
   length--;
      for (int j=i; j<length; j++)
         arr[j] = arr[j+1];
   }
   cout << "The array after deletion is "<<endl;
   for (int i=0; i<length; i++)
      cout << arr[i] << " ";

   return 0;
}

输出

以上代码将产生以下输出:

The array after deletion is
11 15 8 9 10

一次遍历

首先,让我们定义原始数组以及要搜索和从数组中删除的元素:

int ele = 15;
int arr = [11,15,6,8,9,10];

现在,我们声明两个变量:布尔型 **found** 用于指定是否找到元素,以及整型 **pos** 用于存储找到元素的位置:

bool found=false;
int pos=-1;

接下来,我们搜索数组,如果找到元素,则存储其位置并在循环遍历时移动元素。

for (int i=0; i<length; i++){
   if(pos!=-1){
      arr[pos]=arr[pos+1];
      j++;
   }
   else if(arr[i]==ele){
      pos=i;
      found=true;
   }
}

示例

让我们看下面的实现,了解如何在仅一次遍历中删除数组中的元素:

在线演示

#include<iostream>
using namespace std;

int main() {
   int arr[] = {11, 15, 6, 8, 9, 10};
   int length = sizeof(arr)/sizeof(arr[0]);
   int ele = 6 ;

bool found=false;
int pos=-1;
   for (int i=0; i<length; i++){
      if(pos!=-1){
         arr[pos]=arr[pos+1];
         pos++;
      }
      else if(arr[i]==ele){
         pos=i;
         found=true;
      }
   }
   cout << "The array after deletion is "<<endl;
   if(found){
      length--;
   }
   for (int i=0; i<length; i++)
      cout << arr[i] << " ";
   return 0;
}

输出

以上代码将产生以下输出:

The array after deletion is
11 15 8 9 10

更新于: 2021年1月16日

84 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告