หลายฟังก์ชันใน STL คืนค่าเป็น iterator/pointer (เช่น max_element(), find()) ซึ่งชี้ไปที่ตำแหน่งในหน่วยความจำ แต่ไม่ได้บอก index โดยตรง บทความนี้แสดงวิธีหา index จาก pointer/iterator ที่ได้
วิธี 1: ลบ iterator ตัวแรก (Pointer Arithmetic)
iterator ของ vector/random-access container รองรับการลบกันได้ → ได้ระยะห่าง (index)
#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 << "Index of max element: ";
cout << (max_element(vec.begin(), vec.end()) - vec.begin());
}
เอาต์พุท
Max element is: 60 Index of max element: 3
วิธี 2: ใช้ std::distance() (Generic, รองรับทุก iterator category)
#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 << "Index of max element: ";
cout << distance(vec.begin(), max_element(vec.begin(), vec.end()));
}
เอาต์พุท
Max element is: 60 Index of maximum element: 3
การเลือกใช้
| วิธี | เหมาะกับ | หมายเหตุ |
|---|---|---|
| Pointer/Iterator subtraction | Random-access iterators (vector, array, deque, string) | เร็วที่สุด O(1) |
| std::distance() | ทุก iterator category (list, set, map, forward_list) | O(n) สำหรับ non-random-access |
สรุป
ใช้ it - container.begin() สำหรับ vector/array ใช้ distance() สำหรับ container อื่นเพื่อความปลอดภัยและ generic