#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> v = {10, 20, 30, 30, 30, 40, 50};
auto lower = lower_bound(v.begin(), v.end(), 30);
auto upper = upper_bound(v.begin(), v.end(), 30);
cout << lower - v.begin() << endl; // 2
cout << upper - v.begin() << endl; // 5
cout << *lower << endl; // 30
cout << *upper << endl; // 40
return 0;
}
lower와 upper의 타입은 std::vector::iterator입니다. 이는 벡터의 반복자 타입입니다.
이를 코드로 명시적으로 표현하면 다음과 같습니다:
std::vector<int>::iterator lower = std::lower_bound(v.begin(), v.end(), 30);
std::vector<int>::iterator upper = std::upper_bound(v.begin(), v.end(), 30);
하지만 대부분의 경우 auto 키워드를 사용하여 컴파일러가 타입을 추론하도록 합니다.
이 반복자 타입은 포인터와 유사하게 동작합니다. 그래서 lower나 upper를 통해 해당 위치의 값에 접근할 수 있고, 산술 연산을 통해 다른 위치로 이동할 수 있습니다.