C++

[C++] STL알고리즘과 vector와의 연동

코딩 메모장 2024. 10. 10. 22:00
728x90

STL에서 vector는 동적 배열을 제공하는 컨테이너입니다. STL 알고리즘은 이러한 컨테이너와 함께 사용되어 효율적으로 데이터를 처리할 수 있게 해줍니다.

 

vector와 알고리즘의 연동

-데이터 저장: vector는 동적으로 크기를 조정할 수 있는 배열로, 다양한 타입의 데이터를 저장할 수 있습니다. 예를 들어, 정수 데이터를 저장하는 vector는 다음과 같이 생성할 수 있습니다.

std::vector<int> vec = {1, 2, 3, 4, 5};

 

-반복자 사용: STL 알고리즘은 반복자(iterator)를 사용하여 컨테이너의 요소에 접근합니다. 반복자는 컨테이너 내의 요소를 순차적으로 가리키는 포인터 유사 객체로, vector의 경우 begin()과 end() 함수를 통해 반복자를 얻을 수 있습니다.

auto it = vec.begin(); // 시작 반복자
auto end = vec.end();  // 끝 반복자

 

- 알고리즘 적용: STL 알고리즘은 반복자를 이용해 데이터를 처리합니다. 예를 들어, std::sort는 vector의 반복자를 인자로 받아 요소를 정렬합니다. 이때 std::sort는 시간 복잡도 O(N log N)로 동작하는 효율적인 정렬 알고리즘입니다.

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

 

- 함수형 스타일: STL 알고리즘 중 for_each는 컨테이너의 각 요소에 대해 함수를 적용할 수 있게 해줍니다. 람다 함수를 사용하여 vector의 각 요소에 대해 특정 작업을 수행할 수 있습니다.

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

 

예시

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

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

    // 정렬하기
    std::sort(vec.begin(), vec.end());

    // 각 요소 출력하기
    std::for_each(vec.begin(), vec.end(), [](int n) {
        std::cout << n << " ";
    });

    return 0;
}

 

이 예제에서 std::sort와 std::for_each를 사용하여 vector의 요소를 정렬하고 출력하고 있습니다. STL 알고리즘은 코드의 가독성을 높여주고, 반복적인 작업을 줄이면서 성능을 최적화할 수 있는 강력한 도구입니다. vector뿐만 아니라 다른 컨테이너와도 결합하여 더욱 다양한 데이터 처리 작업에 활용할 수 있습니다.

 

 

728x90