如何在 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
广告