Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tính chỉ số (index) từ iterator trả về bởi hàm STL trong C++

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::distance hoạt động với mọi iterator (list, set, map...) nhưng O(n) cho non-random-access.
  • Luôn dùng auto cho kiểu iterator để code chung chung.