안녕하세요.
오늘은 <algorithm> 헤더의 std::remove_copy() 함수에 대해 알아보겠습니다.
remove_copy 함수는 std::copy 함수와 유사한 동작을 하는 함수입니다.
4번째 인자를 추가로 받는 것을 제외하면 copy 함수와 동일한 동작을 합니다.
template <class InputIterator, class OutputIterator, class T>
OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& val);
remove_copy 함수는 [first, last) 범위의 요소들 중 val과 같은 요소를 제외하고 result 위치에 순차적으로 복사합니다.
first, last
[first, last) 범위의 컨테이너의 요소들을 복사합니다.
result
복사한 요소를 저장할 시작 위치를 지정합니다.
'=' 연산자를 이용하여 저장하기 때문에 저장 공간이 충분하지 않다면 런타임 에러가 발생합니다.
val
요소들을 val과 비교하여 '=='이 성립하지 않을 경우 복사를 수행합니다.
해당 인자만 제외하면 std::copy 함수와 동일합니다.
back_inserter()와 copy() 함수에 대한 포스팅은 아래 링크를 참고해주세요.
2019/10/26 - [C++/Function] - [C++ STL] 반복자 어댑터 std::back_inserter, 컨테이너 복사 std::copy 함수
remove_copy() 함수는 아래와 같이 동작합니다.
6라인을 보면 val와 같은 요소가 아닐 경우만 복사를 하고 있습니다.
예제)
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using std::string;
using std::vector;
using std::cout;
int main(void)
{
vector<int> vec_1;
vector<int> vec_2;
// 1 1 2 2 3 3 4 4 5 5
for (int i = 1; i <= 5; ++i)
{
vec_1.push_back(i);
vec_1.push_back(i);
}
// vec_1에서 3을 제외한 모든 요소를 vec_2로 순차적으로 복사합니다.
std::remove_copy(vec_1.begin(), vec_1.end(), std::back_inserter(vec_2), 3);
// 1 1 2 2 4 4 5 5
for (int val : vec_2)
{
cout << val << " ";
}
cout << "\n";
return 0;
}
결과)
설명)
vec_1의 모든 요소들 중 3을 제외한 요소를 순차적으로 vec_2의 끝에 복사합니다.
참고)
http://www.cplusplus.com/reference/algorithm/remove_copy/?kw=remove_copy
'C,C++ > C++' 카테고리의 다른 글
[C++ STL] <algorithm> std::remove_if 함수 (0) | 2019.11.08 |
---|---|
[C++ STL] <algorithm> std::search() 함수 (0) | 2019.11.07 |
[C++] std::transform() 함수 및 back_inserter 함수에 대해 알아보자 (0) | 2019.11.04 |
[C++] std::equal 함수로 간단하게 회문 판별 함수 구현해보기 / palindrome (0) | 2019.11.02 |
[C++] 공백 단위로 문자열 자르는 split 함수 구현 ( find_if() 사용 ) (0) | 2019.11.01 |
댓글