본문 바로가기
프로그래밍/C++

C++ std::copy_if

by comflex 2023. 3. 2.
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