STL Algorithm in C++

sunghoon·2025년 3월 26일
0

2.0 Glove Project

목록 보기
32/35

개념

  • 정렬. 검색하는 방법같은 유용한 생각들을 정리해 놓은 함수들이다.
  • 알고리즘은 모두 일반적이기 때문에, 하나의 컨테이너에 종속되지 않고, 여러 컨테이너에 사용할 수 있다.

종류

변경 불가 순차 알고리즘; Nonmutatinng Sequence Algorithm

변경 가능 순차 알고리즘; Mutating Sequence Algorithm

정렬 관리 알고리즘; Sorting Related Algorithm

범용 수치 알고리즘 Generalized Numeric Algorithm

find 알고리즘 함수

여러 종류의 알고리즘 함수가 있지만 사용 방법은 유사하다.

컨테이너에 특정 값이 존재한는지 찾는 함수

// find(첫번째 위치, 마지막 다음 위치, 찾는 값)
find(vec.begin(), vec.end(), 30);
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    int arr[] = {10, 20, 30, 40, 50};
    vector<int> vec(&arr[0], &arr[5]);
    vector<int>::iterator it;

    if (find(vec.begin(), vec.end(), 30) != vec.end())
    {
        cout << "검색 성공" << endl;
    }
    else
    {
        cout << "검색 실패" << endl;
    }
    
    return 0;
}

for_each

기본형태

UniOp for_each(
	InputIterator first,
	InputIterator last,
	UniOp op
)

UniOp op 콜백함수로 받는 형태

  • 전 구간을 순회하면서 op 함수 객체를 호출한다.

예제

아래의 코드의 모든 요소를 출력할 때 반복문으로 인덱스를 통해 접근하는 것이 아닌 반복자를 통한 접근하기

vector <string> vs;
// string 타입을 담을 수 있는 벡터 객체

vs.push_back("인성 교육의 중요성");
vs.push_back("날이 좋아서 날이 적당해서");
vs.push_back("낮잠을 잤습니다.");
vs.push_back("얼마나 좋아. 집도 사고, 땅도 사고");
void func(string str) {
    cout << str << endl;
}

int main()
{
    for_each(vs.begin(), vs.end(), func); 
    // 콜백함수 func는 호출이 아닌 "등록" 개념 => 순회할 때 마다 호출되는 것
    
}
profile
프라다 신은 빈지노와 쿠페를 타는 꿈을 꿨다.

0개의 댓글