[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
Loading script...
codechachaCopyright ©2019 codechacha