C에서 std::remove는 어떻게 작동하며, std::remove와 std::erase의 차이점은 무엇입니까?
Oct 30, 2024 am 02:42 AMstd::remove의 기능 이해
C에서 std::remove 알고리즘은 두 개의 순방향으로 표시되는 임의 시퀀스에서 작동합니다. 반복자. 그 목적은 시퀀스 내의 요소를 재정렬하여 일치하지 않는 요소를 앞으로 이동시키는 것입니다. std::erase와 달리 제거는 컨테이너에서 요소를 물리적으로 삭제하지 않습니다. 대신 재구성합니다.
예
다음 코드 조각을 고려하세요.
std::vector<int> a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); std::vector<int>::iterator iter = a.begin(); std::vector<int>::iterator endIter = a.end(); std::cout << "Using iter...\n"; for (; iter != endIter; ++iter) { std::cout << *iter << "\n"; } std::cout << "Using size...\n"; for (int i = 0; i < a.size(); ++i) { std::cout << a[i] << "\n"; }
출력은 다음과 같습니다.
Using iter... 2 2 Using size... 2 2
remove가 요소 2를 앞으로 효과적으로 이동했지만 초기화되지 않은 메모리가 제거되지 않았기 때문에 벡터의 크기는 2로 그대로 유지됩니다.
Erase-Remove Idiom
삭제-제거 관용구는 제거와 지우기를 결합하여 원치 않는 요소를 물리적으로 제거합니다. 코드:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
벡터에서 요소 1을 제거하고 크기를 1로 줄입니다.
std::remove 사용 사례
제거의 기본 용도는 지우기-제거 관용구이지만 다음과 같은 다른 상황에서도 활용할 수 있습니다.
- 요소의 마지막 항목 식별: 다음을 제외한 모든 항목을 제거합니다. 마지막 요소인 경우, 제거에서 반환된 반복자를 사용하여 최종 모양을 정확히 찾아낼 수 있습니다.
- 고유한 요소가 포함된 새 시퀀스 생성: 중복된 요소를 제거하면 고유한 요소만 포함된 새 시퀀스를 생성할 수 있습니다.
- 시퀀스를 두 부분으로 분할: 제거를 사용하면 시퀀스를 두 세그먼트로 분할할 수 있습니다. 하나는 일치하는 요소를 포함하고 다른 하나는 일치하지 않는 요소를 포함합니다.
위 내용은 C에서 std::remove는 어떻게 작동하며, std::remove와 std::erase의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
