方法1: 一時的な配列を使用する方法
- 元の配列をソートします。これにより、重複要素が隣り合うようになります。
- 一時的な配列を作成し、重複要素を追加しません。
- 元の配列をスキャンし、連続した要素が異なる場合にのみ、一時的な配列に要素を追加します。
- 一時的な配列を元の配列にコピーします。
以下に、この方法の例を示します。
#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関数を使用する方法
- 元の配列をソートします。これにより、重複要素が隣り合うようになります。
- unique関数を使用して、重複要素を配列の末尾に移動します。
- unique関数が返すイテレータを使用して、重複要素の範囲を特定します。
- 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: 一時的な配列を使用する方法
- 元の配列をソートします。これにより、重複要素が隣り合うようになります。
- 一時的な配列を作成し、重複要素を追加しません。
- 元の配列をスキャンし、連続した要素が異なる場合にのみ、一時的な配列に要素を追加します。
- 一時的な配列を元の配列にコピーします。
以下に、この方法の例を示します。
#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関数を使用する方法
- 元の配列をソートします。これにより、重複要素が隣り合うようになります。
- unique関数を使用して、重複要素を配列の末尾に移動します。
- unique関数が返すイテレータを使用して、重複要素の範囲を特定します。
- 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++で配列内の重複要素を削除することができます。どちらの方法も効率的であり、シンプルな実装です。選択した方法に応じて、適切なコードを使用して重複要素を削除できます