C++で配列内の重複要素を削除する方法


方法1: 一時的な配列を使用する方法

  1. 元の配列をソートします。これにより、重複要素が隣り合うようになります。
  2. 一時的な配列を作成し、重複要素を追加しません。
  3. 元の配列をスキャンし、連続した要素が異なる場合にのみ、一時的な配列に要素を追加します。
  4. 一時的な配列を元の配列にコピーします。

以下に、この方法の例を示します。

#include <iostream>
#include <algorithm>
#include <vector>
// 配列内の重複要素を削除する関数
std::vector<int> removeDuplicates(std::vector<int>& arr) {
    std::sort(arr.begin(), arr.end()); // 配列をソートする
    std::vector<int> result; // 一時的な配列
    for (int i = 0; i < arr.size(); i++) {
        if (i == 0 || arr[i] != arr[i - 1]) {
            result.push_back(arr[i]); // 連続した要素が異なる場合にのみ追加
        }
    }
    return result;
}
int main() {
    std::vector<int> arr = {3, 1, 2, 2, 1, 5, 6, 3, 3};
    std::vector<int> result = removeDuplicates(arr);
    // 結果の表示
    for (int i = 0; i < result.size(); i++) {
        std::cout << result[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

出力: 1 2 3 5 6

方法2: STLのunique関数を使用する方法

  1. 元の配列をソートします。これにより、重複要素が隣り合うようになります。
  2. unique関数を使用して、重複要素を配列の末尾に移動します。
  3. unique関数が返すイテレータを使用して、重複要素の範囲を特定します。
  4. erase関数を使用して、重複要素を削除します。

以下に、この方法の例を示します。

#include <iostream>
#include <algorithm>
#include <vector>
// 配列内の重複要素を削除する関数
std::vector<int> removeDuplicates(std::vector<int>& arr) {
    std::sort(arr.begin(), arr.end()); // 配列をソートする
    auto it = std::unique(arr.begin(), arr.end()); // 重複要素を配列の末尾に移動
    arr.erase(it, arr.end()); // 重複要素を削除
    return arr;
}
int main() {
    std::vector<int> arr = {3, 1, 2, 2, 1, 5, 6, 3, 3};
    std::vector<int> result = removeDuplicates(arr);
    // 結果の表示
    for (int i = 0; i < result.size(); i++) {
        std::cout << result[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

出力: 1 2 3 5 6

以上の方法で、C++で配列内の重複要素を削除することができます。どちらの方法も効率的であり、シンプルな実装です。選択した方法に応じて、適切なコードを使用して重複要素を削除Title: C++で配列内の重複要素を削除する方法

Tags: C++, 配列, 重複要素, アルゴリズム

Content: C++で配列内の重複要素を効率的に削除する方法を説明します。以下にいくつかのシンプルで簡単な方法とコード例を示します。

方法1: 一時的な配列を使用する方法

  1. 元の配列をソートします。これにより、重複要素が隣り合うようになります。
  2. 一時的な配列を作成し、重複要素を追加しません。
  3. 元の配列をスキャンし、連続した要素が異なる場合にのみ、一時的な配列に要素を追加します。
  4. 一時的な配列を元の配列にコピーします。

以下に、この方法の例を示します。

#include <iostream>
#include <algorithm>
#include <vector>
// 配列内の重複要素を削除する関数
std::vector<int> removeDuplicates(std::vector<int>& arr) {
    std::sort(arr.begin(), arr.end()); // 配列をソートする
    std::vector<int> result; // 一時的な配列
    for (int i = 0; i < arr.size(); i++) {
        if (i == 0 || arr[i] != arr[i - 1]) {
            result.push_back(arr[i]); // 連続した要素が異なる場合にのみ追加
        }
    }
    return result;
}
int main() {
    std::vector<int> arr = {3, 1, 2, 2, 1, 5, 6, 3, 3};
    std::vector<int> result = removeDuplicates(arr);
    // 結果の表示
    for (int i = 0; i < result.size(); i++) {
        std::cout << result[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

出力: 1 2 3 5 6

方法2: STLのunique関数を使用する方法

  1. 元の配列をソートします。これにより、重複要素が隣り合うようになります。
  2. unique関数を使用して、重複要素を配列の末尾に移動します。
  3. unique関数が返すイテレータを使用して、重複要素の範囲を特定します。
  4. erase関数を使用して、重複要素を削除します。

以下に、この方法の例を示します。

#include <iostream>
#include <algorithm>
#include <vector>
// 配列内の重複要素を削除する関数
std::vector<int> removeDuplicates(std::vector<int>& arr) {
    std::sort(arr.begin(), arr.end()); // 配列をソートする
    auto it = std::unique(arr.begin(), arr.end()); // 重複要素を配列の末尾に移動
    arr.erase(it, arr.end()); // 重複要素を削除
    return arr;
}
int main() {
    std::vector<int> arr = {3, 1, 2, 2, 1, 5, 6, 3, 3};
    std::vector<int> result = removeDuplicates(arr);
    // 結果の表示
    for (int i = 0; i < result.size(); i++) {
        std::cout << result[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

出力: 1 2 3 5 6

以上の方法で、C++で配列内の重複要素を削除することができます。どちらの方法も効率的であり、シンプルな実装です。選択した方法に応じて、適切なコードを使用して重複要素を削除できます