C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で2つのトラバーサルと1つのトラバーサルを使用して、配列から要素を削除しますか?


2つのトラバーサル

まず、元の配列と、検索して配列から削除する要素を定義しましょう-

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

次の実装を見て、2つのトラバーサルで配列内の要素が削除されていることを確認しましょう-

#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

1つのトラバーサル

まず、元の配列と、検索して配列から削除する要素を定義しましょう-

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

ここで、2つの変数をブール値 foundで宣言します。 これは、要素が見つかったかどうかを指定し、int pos 見つかった場合は要素の位置を保存します-

bool found=false;
int pos=-1;

次に、配列を検索し、要素が見つかった場合は、ループが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;
   }
}

次の実装を見て、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 ;

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

  1. C ++で条件演算子を使用せずに、配列から最大の要素を検索します

    いくつかの要素を持つ配列Aがあるとします。配列Aで最大の要素を見つける必要がありますが、制約は、条件演算子を使用できないことです。したがって、A =[12、63、32、24、78、56、20]の場合、最大要素は78にな​​ります。 この問題を解決するために、ビット単位のAND演算を使用します。最初に、1つの追加要素INT_MAX(すべてのビットが1)を配列に挿入します。次に、配列から任意のペアの最大AND値を見つけようとします。この取得された最大値には、INT_MAXのAND値と元の配列の最大要素が含まれ、これが結果になります。 例 #include <iostream> #in

  2. STLを使用したC++の配列製品

    これは、配列製品を見つけるためのC++プログラムの例です。 アルゴリズム Begin Initialize the values of array. Call used defined function accumulate to return the product of array. Print the solution. End. サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n) { &nbs