728x90
반응형
std::copy_if는 C++ STL의 알고리즘 중 하나로, 조건에 따라 컨테이너에서 원소를 복사하는 함수입니다. std::copy_if의 선언은 다음과 같습니다.
template<class InputIt, class OutputIt, class UnaryPredicate>
OutputIt copy_if(InputIt first, InputIt last, OutputIt d_first, UnaryPredicate pred);
위의 함수 시그니처에서 각 매개변수의 의미는 다음과 같습니다.
- first, last: 복사할 원소들의 범위를 지정하는 반복자
- d_first: 복사된 원소들을 저장할 출력 컨테이너의 시작 위치를 지정하는 반복자
- pred: 각 원소에 대해 조건을 검사할 함수 객체
std::copy_if 함수는 first와 last 사이의 범위를 순회하면서 pred 함수 객체가 true를 반환하는 원소를 d_first 위치부터 복사합니다.
예제
다음은 std::copy_if 함수의 예제입니다. 이 예제에서는 벡터에서 짝수만 추출하여 새로운 벡터에 저장하는 방법을 보여줍니다.
반응형
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<int> even;
// 짝수만 복사
std::copy_if(vec.begin(), vec.end(), std::back_inserter(even), [](int i) { return i % 2 == 0; });
// 결과 출력
std::cout << "Original vector: ";
for (auto& i : vec) {
std::cout << i << ' ';
}
std::cout << '\n';
std::cout << "Even numbers: ";
for (auto& i : even) {
std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}
위 코드에서는 vec 벡터의 원소를 순회하면서 i % 2 == 0 조건을 만족하는 원소만 even 벡터에 복사합니다. std::copy_if 함수는 원소를 복사하는 대신 출력 컨테이너에 값을 삽입하는 반복자 std::back_inserter를 사용합니다.
결론
이상으로 std::copy_if 함수에 대해 알아보았습니다. std::copy_if 함수를 사용하면 조건에 따라 컨테이너에서 원소를 추출하여 다른 컨테이너에 복사할 수 있습니다. std::copy_if 함수를 잘 활용하면 코드를 간결하게 유지할 수 있으며, STL의 다른 알고리즘과 결합하여 더욱 강력한 기능을 구현할 수 있습니다.
728x90
반응형
'프로그래밍 > C++' 카테고리의 다른 글
C++ std::remove_if (0) | 2023.03.02 |
---|---|
C++ 쓰레드(thread) (2) | 2023.02.21 |
C++ transform (0) | 2023.02.18 |
C++ Functor(함수 객체) (2) | 2023.02.17 |
C++ std::sort (2) | 2023.01.04 |