이 섹션에서는 C++에서 STL이 반환하는 포인터를 사용하여 인덱스를 생성하는 방법을 볼 것입니다. 우리가 알고 있듯이 C++의 많은 내장 함수는 원하는 숫자의 주소를 제공하는 메모리의 위치에 대한 포인터를 반환하지만 반환된 값의 컨테이너에 있는 실제 인덱스와는 관련이 없습니다. 예를 들어, 코드의 최대 요소를 결정하기 위해 std::max_element() 함수를 사용합니다. 이것은 원하는 요소의 인덱스를 반환하지 않고 메모리의 주소를 반환합니다. 그러나 때로는 해당 주소에서 인덱스를 가져와야 합니다. 여기에서 인덱스를 생성하는 방법을 살펴보겠습니다.
첫 번째 반복자 빼기
container.begin() 메서드에서 첫 번째 위치의 주소를 얻습니다. 이제 반환된 주소에서 시작 주소를 빼면 그 차이를 알 수 있습니다. 여기에서 색인을 찾을 수 있습니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; int main(){ vector<int> vec = { 10, 40, 50, 60, 30}; cout << "Max element is : " << (*max_element(vec.begin(), vec.end())) << endl; cout << "The index of maximum element : "; cout << max_element(vec.begin(), vec.end()) - vec.begin(); }
출력
Max element is : 60 The index of maximum element : 3
인덱스를 찾는 또 다른 방법은 std::distance() 메서드를 사용하는 것입니다. 아래와 같이 사용하겠습니다 -
예시
#include <bits/stdc++.h> using namespace std; int main(){ vector<int< vec = { 10, 40, 50, 60, 30}; cout << "Max element is : " << (*max_element(vec.begin(), vec.end())) << endl; cout << "The index of maximum element : "; cout << distance(vec.begin(), max_element(vec.begin(), vec.end())); }
출력
Max element is : 60 The index of maximum element : 3