[C++] 配列から特定の要素を削除する

配列から特定の要素を削除する方法を紹介します。

1. listを使った方法

配列はサイズが動的に変更されないため、要素を削除するには新しい配列を作成する必要があります。

listは動的にサイズを変更できるため、配列をlistに変換して要素を削除して配列に変換する方法があります。

以下の例は配列から 30 を削除します。

#include <iostream>
#include <list>

int main() {

    int arr[] = {10, 20, 30, 40};

    // Convert array to list
    std::list<int> list(std::begin(arr), std::end(arr));

    // Remove an element
    list.remove(30);

    // Convert list to array
    int newArr[list.size()];
    std::copy(list.begin(), list.end(), newArr);

    for (int i: newArr) {
        std::cout << i << ' ';
    }

    return 0;
}

Output:

10 20 40

2. remove_if() で複数の要素を削除する

リストの remove_if() を使うと、特定の条件に一致する要素をすべて削除できます。

以下の例は remove_if() にラムダ式を渡し、30 未満の要素をすべて削除します。

#include <iostream>
#include <list>

int main() {

    int arr[] = {10, 20, 30, 40};

    // Convert array to list
    std::list<int> list(std::begin(arr), std::end(arr));

    // Remove elements
    list.remove_if([](int value){ return value < 30; });

    // Convert list to array
    int newArr[list.size()];
    std::copy(list.begin(), list.end(), newArr);

    for (int i: newArr) {
        std::cout << i << ' ';
    }

    return 0;
}

Output:

30 40
codechachaCopyright ©2019 codechacha