Menu
CoddyTech

요소 제거하기

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨. 56개 중 16번째.

때로는 더 이상 필요하지 않은 벡터의 요소를 제거해야 합니다. 벡터에서는 .erase() 메서드와 함께 반복자를 사용해야 합니다. std::find()와 .erase()를 조합하면 값으로 요소를 제거할 수 있습니다.

벡터에서 요소를 제거하는 방법은 다음과 같습니다. std::find()는 <algorithm> 헤더에 있으므로 <vector>와 함께 포함하세요.

#include <algorithm>
#include <vector>
std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // 반복자가 가리키는 위치의 요소를 제거합니다
}

erase()를 호출하면 해당 위치의 요소가 제거되고 그 뒤의 모든 요소가 한 칸씩 앞으로 이동합니다. 존재하지 않는 요소를 찾아 제거하려고 하면 find()는 end()를 반환하며, 이를 확인하면 오류를 방지할 수 있습니다.

이 패턴을 사용하면 요소를 안전하고 예측 가능하게 제거할 수 있습니다. 사용자 입력이나 프로그램 로직에 따라 특정 항목을 제거해야 하는 동적 컬렉션을 유지 관리할 때 특히 유용합니다. 삭제하기 전에 반복자가 유효한지 항상 확인해야 한다는 점을 기억하세요.

challenge icon

챌린지

쉬움

std::find()와 결합한 .erase() 메서드를 사용하여 std::vector에서 요소를 제거하는 프로그램을 작성하세요. 이 과제에서는 벡터에서 특정 요소를 안전하게 제거하고 그 결과를 확인하는 방법을 이해하고 있는지 평가합니다.

다음 입력이 제공됩니다:

  • 벡터에 처음 추가할 요소의 개수를 나타내는 정수 n
  • 그다음 벡터에 삽입할 n개의 정수
  • 제거할 요소의 개수를 나타내는 정수 m
  • 그다음 벡터에서 제거할 요소를 나타내는 m개의 정수

프로그램은 다음을 수행해야 합니다:

  1. 빈 std::vector<int>를 생성합니다
  2. 추가할 요소의 개수를 읽고 .push_back()을 사용하여 벡터에 삽입합니다
  3. 모든 요소를 삽입한 후 벡터의 초기 크기를 출력합니다
  4. 제거할 요소의 개수를 읽습니다
  5. 제거할 각 요소에 대해 std::find()를 사용하여 요소를 찾은 다음, 찾은 경우 .erase()를 사용하여 제거합니다
  6. 제거를 시도할 때마다 벡터의 현재 크기를 출력합니다
  7. 마지막으로 벡터에 남아 있는 요소를 순회하며 순서대로 출력합니다

다음의 정확한 출력 형식을 사용하세요:

초기 벡터 크기:

Initial size: [size]

제거를 시도할 때마다:

After removing [number]: size = [current_size]

마지막으로 남아 있는 요소:

Remaining elements: [element1] [element2] [element3] ...

.erase()에는 반복자가 필요하므로, 먼저 std::find()를 사용하여 요소를 찾아야 합니다. 요소를 지우기 전에 항상 요소를 찾았는지 확인하세요. 범위 기반 for 루프를 사용하여 현재 순서대로 남아 있는 요소를 출력하세요.

직접 해보기

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 추가할 요소의 개수를 입력받습니다
    int n;
    cin >> n;
    
    // 빈 벡터를 생성합니다
    vector<int> myVector;
    
    // n개의 요소를 입력받아 삽입합니다
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // 요소를 벡터에 삽입합니다
    }
    
    // 제거할 요소의 개수를 입력받습니다
    int m;
    cin >> m;
    
    // TODO: 아래에 코드를 작성하세요
    // 1. 벡터의 초기 크기를 출력합니다
    // 2. 제거할 각 요소를 찾아 .erase()로 제거하고, 제거할 때마다 벡터의 크기를 출력합니다
    // 3. 벡터에 남은 요소를 출력합니다
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직과 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러