요소 제거하기
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()를 반환하며, 이를 확인하면 오류를 방지할 수 있습니다.
이 패턴을 사용하면 요소를 안전하고 예측 가능하게 제거할 수 있습니다. 사용자 입력이나 프로그램 로직에 따라 특정 항목을 제거해야 하는 동적 컬렉션을 유지 관리할 때 특히 유용합니다. 삭제하기 전에 반복자가 유효한지 항상 확인해야 한다는 점을 기억하세요.
챌린지
쉬움std::find()와 결합한 .erase() 메서드를 사용하여 std::vector에서 요소를 제거하는 프로그램을 작성하세요. 이 과제에서는 벡터에서 특정 요소를 안전하게 제거하고 그 결과를 확인하는 방법을 이해하고 있는지 평가합니다.
다음 입력이 제공됩니다:
- 벡터에 처음 추가할 요소의 개수를 나타내는 정수
n - 그다음 벡터에 삽입할
n개의 정수 - 제거할 요소의 개수를 나타내는 정수
m - 그다음 벡터에서 제거할 요소를 나타내는
m개의 정수
프로그램은 다음을 수행해야 합니다:
- 빈
std::vector<int>를 생성합니다 - 추가할 요소의 개수를 읽고
.push_back()을 사용하여 벡터에 삽입합니다 - 모든 요소를 삽입한 후 벡터의 초기 크기를 출력합니다
- 제거할 요소의 개수를 읽습니다
- 제거할 각 요소에 대해
std::find()를 사용하여 요소를 찾은 다음, 찾은 경우.erase()를 사용하여 제거합니다 - 제거를 시도할 때마다 벡터의 현재 크기를 출력합니다
- 마지막으로 벡터에 남아 있는 요소를 순회하며 순서대로 출력합니다
다음의 정확한 출력 형식을 사용하세요:
초기 벡터 크기:
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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직과 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러