관리 메뉴

기억을 위한 기록들

[CPP] <algorithm> 헤더에서 유용한 함수 본문

C & CPP

[CPP] <algorithm> 헤더에서 유용한 함수

에드윈H 2023. 11. 30. 13:21

 

 

코딩테스트들을 반복해서 해보다가 자주 사용해서 유용한 함수들을 모아봤다.

더 많이 있기도 하지만 최대한 '자주' 사용한것들을 모아봤고, 중간 중간 추가 해주는 글이다.

 

- 각 함수들이 만능은 아니다. 사용 한다고 무조건 장점만 있는것도 아니다.

- 더 나은 방법이 있을수도 있다.

 

-  std::reverse -  함수 주어진 배열을 뒤집어 준다.

#include <iostream>
#include <algorithm> // std::reverse

int main() {
    const int size = 5;
    int myArray[size] = {1, 2, 3, 4, 5};

    // 배열 뒤집기
    std::reverse(myArray, myArray + size);

    // 뒤집힌 배열 출력
    std::cout << "Reversed Array: ";
    for (int i = 0; i < size; i++) {
        std::cout << myArray[i] << " ";
    }

    return 0;
}

 

 

 

- std::sort - 요소들을 정렬해준다.

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> myVector = {4, 2, 5, 1, 3};

    std::sort(myVector.begin(), myVector.end());

    // 정렬된 벡터 출력: 1 2 3 4 5
    for (int num : myVector) {
        std::cout << num << " ";
    }

    return 0;
}

 

 

 

- std::find - 요소를 찾아서 해당 위치 반환

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    auto it = std::find(myVector.begin(), myVector.end(), 3);

    if (it != myVector.end()) {
        std::cout << "Element found at position: " << std::distance(myVector.begin(), it) << std::endl;
    } else {
        std::cout << "Element not found" << std::endl;
    }

    return 0;
}

 

 

- std::find - 요소를 특정 조건으로 찾아서 해당 위치 반환

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    auto it = std::find_if(myVector.begin(), myVector.end(), [](int x) { return x % 2 == 0; });

    if (it != myVector.end()) {
        std::cout << "First even element found: " << *it << std::endl;
    } else {
        std::cout << "No even elements found" << std::endl;
    }

    return 0;
}

 

- std::min / std::max - 최소값 최대값을 찾아준다.

#include <algorithm>
#include <iostream>

int main() {
    int a = 5, b = 3;

    int minValue = std::min(a, b);
    int maxValue = std::max(a, b);

    std::cout << "Min: " << minValue << std::endl; // 출력: 3
    std::cout << "Max: " << maxValue << std::endl; // 출력: 5

    return 0;
}

 

 

- std::count - 특정 값의 갯수를 세어준다.

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 2, 3, 2, 4, 5};

    int count = std::count(myVector.begin(), myVector.end(), 2);

    std::cout << "Number of 2s: " << count << std::endl; // 출력: 3

    return 0;
}

 

 

 

- std::count_if - 특정 값의 조건으로 갯수를 세어준다.

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    int count = std::count_if(myVector.begin(), myVector.end(), [](int x) { return x % 2 == 0; });

    std::cout << "Number of even elements: " << count << std::endl;

    return 0;
}

 

 

 

- std::for_each - 범위의 요소들에 대해 특정 동작을 수행

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    std::for_each(myVector.begin(), myVector.end(), [](int& x) { x *= 2; });

    // 모든 요소를 2배로 변경한 벡터 출력: 2 4 6 8 10
    for (int num : myVector) {
        std::cout << num << " ";
    }

    return 0;
}

 

 

 

- std::accumulate - 범위의 값을 합해준다.

#include <algorithm>
#include <numeric> // std::accumulate
#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    int sum = std::accumulate(myVector.begin(), myVector.end(), 0);

    std::cout << "Sum of elements: " << sum << std::endl;

    return 0;
}

 

 

 

- std::unique - 중복된 요소를 제거한다( 정렬된 벡터여야 한다)

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 2, 3, 3, 4, 5};

    std::sort(myVector.begin(), myVector.end());
    auto last = std::unique(myVector.begin(), myVector.end());
    myVector.erase(last, myVector.end());

    // 중복이 제거된 벡터 출력: 1 2 3 4 5
    for (int num : myVector) {
        std::cout << num << " ";
    }

    return 0;
}