如何在 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告