Nhiều hàm STL (như max_element, find) trả về iterator (con trỏ), không phải chỉ số. Để lấy index, ta trừ iterator đầu tiên (begin()) hoặc dùng std::distance.
Cách 1: Trừ iterator (chỉ áp dụng random-access iterator)
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> vec = {10, 40, 50, 60, 30};
auto it = max_element(vec.begin(), vec.end());
cout << "Max element: " << *it << endl;
cout << "Index: " << (it - vec.begin()) << endl;
return 0;
}
Max element: 60 Index: 3
Cách 2: std::distance (áp dụng mọi iterator)
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> vec = {10, 40, 50, 60, 30};
auto it = max_element(vec.begin(), vec.end());
cout << "Max element: " << *it << endl;
cout << "Index: " << distance(vec.begin(), it) << endl;
return 0;
}
Max element: 60 Index: 3
Lưu ý
- Trừ iterator chỉ hợp lệ với random-access iterator (vector, deque, array, string).
std::distancehoạt động với mọi iterator (list, set, map...) nhưng O(n) cho non-random-access.- Luôn dùng
autocho kiểu iterator để code chung chung.