Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 STL 함수에서 반환된 포인터를 사용하여 인덱스 계산


이 섹션에서는 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