Menu
Coddy logo textTech

요소 제거하기

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

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

벡터에서 요소를 제거하는 방법은 다음과 같습니다:

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()를 반환하며, 이를 확인하면 오류를 방지할 수 있습니다.

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

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()는 반복자(iterator)를 필요로 하므로, 요소를 찾기 위해 먼저 std::find()를 사용해야 함을 기억하세요. 삭제하기 전에 항상 요소를 찾았는지 확인하십시오. 범위 기반 for 루프를 사용하여 현재 순서대로 남은 요소를 출력하세요.

치트 시트

std::find().erase()와 결합하여 벡터에서 특정 요소를 제거합니다:

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

정의되지 않은 동작을 방지하려면 삭제하기 전에 항상 반복자가 end()와 같지 않은지 확인하십시오. .erase() 메서드는 값이 아닌 반복자를 직접 필요로 합니다.

직접 해보기

#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실력 점검

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

로직과 흐름의 모든 레슨