[c++] 반복문을 사용한 요소 삭제

벡터에서 요소를 삭제하는 가장 간단한 방법은 erase 함수를 사용하는 것입니다. erase 함수를 사용하면 컨테이너에서 특정 위치의 요소를 삭제할 수 있습니다.

예를 들어, 다음과 같은 코드로 반복문을 사용하여 벡터에서 특정 조건을 만족하는 요소를 삭제할 수 있습니다.

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5, 6};

    for (auto it = vec.begin(); it != vec.end(); ) {
        if (*it % 2 == 0) {
            it = vec.erase(it);
        } else {
            ++it;
        }
    }

    for (auto num : vec) {
        std::cout << num << " ";
    }

    return 0;
}

위의 코드에서 erase 함수를 사용하여 조건을 만족하는 요소를 삭제하고 있습니다. 위 코드를 실행하면 홀수만 남겨져 있게 됩니다. 하지만, 주의해야 할 점은 erase 함수가 요소를 삭제한 후에도 반복자가 올바르게 유지되도록 해야 한다는 것입니다.

또 다른 방법은 erase-remove 이라는 패턴을 사용하는 것입니다. erase-remove 패턴은 특정 조건을 만족하는 요소를 찾고 이를 한번에 삭제하는 효율적인 방법입니다.

vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i){ return i % 2 == 0; }), vec.end());

이 패턴은 벡터에서 특정 조건을 만족하는 모든 요소를 찾고, 이를 벡터의 끝으로 옮긴 뒤 남은 요소를 삭제하는 방식으로 동작합니다.

이러한 방법들을 사용하면 반복문을 사용하여 요소를 삭제하는 과정에서 발생할 수 있는 예기치 못한 결과를 피할 수 있습니다.